Ben (de söyleyebilir nasıl ~/.bashrc
ben etkileşimli modda çalışıyor ya, demek, ssh üzerinden bir komut yürütme ediyorsam). ANSI kaçış dizilerinin .bashrc
ikincisiyse yazdırılmasını önlemek istiyorum .
Ben (de söyleyebilir nasıl ~/.bashrc
ben etkileşimli modda çalışıyor ya, demek, ssh üzerinden bir komut yürütme ediyorsam). ANSI kaçış dizilerinin .bashrc
ikincisiyse yazdırılmasını önlemek istiyorum .
Yanıtlar:
Göre man bash
:
PS1 ayarlanır ve $ - eğer bash etkileşimli ise i bir kabuk betiğinin veya bir başlangıç dosyasının bu durumu test etmesini sağlar.
Yani kullanabilirsiniz:
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
Ayrıca:
Oturum açma kabuğu olmayan etkileşimli bir kabuk başlatıldığında, bash, bu dosyalar varsa, /etc/bash.bashrc ve ~ / .bashrc komutlarını okur ve çalıştırır.
Bu yüzden ~/.bashrc
sadece etkileşimli mermiler için kaynaklı. Bazen, insanlar beklenen davranışı engellediğinden kaynaklı ~/.bash_profile
ya ~/.profile
da yanlış olanı kullanırlar. Yaygın olan kodun bakımını basitleştirmek istiyorsanız, ortak kodu içeren ayrı bir dosya kullanmalı ve onu her iki rc dosyadan da bağımsız olarak almalısınız.
Giriş rc
dosyalarından stdout çıktısı ~/.bash_profile
yoksa ya da örneğin ~/.profile
düzgün çalışmasını engelleyebileceğinden en iyisidir rsync
.
Her durumda, yanlış yapılandırma olabileceğinden, etkileşimi test etmek iyi bir fikirdir.
[[ $- =~ i ]] && echo interactive
i
~/.bash_profile
ya ~/.profile
da beklenen davranışın müdahale beri yanlıştır Doğru. Eğer kaynak hakkında ne düşünüyorsunuz ~/.bashrc
gelen ~/.bash_login
? Giriş kabuğunun etkileşimli olması gerekmediğinden, sanırım bu da yanlış.
kullanın:
if tty -s; then echo interactive; fi
test
aracı (erkek sayfasından) bu kontrol edebilirsiniz:
-t FD True if FD is opened on a terminal.
Yani örneğin kullanabilirsiniz:
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
veya
if [ -t 1 ] ; then
echo stdout is a terminal
fi
bash <<< 'test -t 0 && echo Y || echo X'
yazıyor Y
, bash -c 'test -t 0 && echo Y || echo X'
yazıyorX
Genellikle tty programının çıktısına bakarım.
Eğer bir tty kullanıyorsanız, hangi tty üzerinde olduğunuzu size söyleyecektir. İnteraktif modda değilseniz, genellikle "tty değil" gibi bir şey söyleyecektir.