Ben (de söyleyebilir nasıl ~/.bashrcben etkileşimli modda çalışıyor ya, demek, ssh üzerinden bir komut yürütme ediyorsam). ANSI kaçış dizilerinin .bashrcikincisiyse yazdırılmasını önlemek istiyorum .
Ben (de söyleyebilir nasıl ~/.bashrcben etkileşimli modda çalışıyor ya, demek, ssh üzerinden bir komut yürütme ediyorsam). ANSI kaçış dizilerinin .bashrcikincisiyse 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 ~/.bashrcsadece etkileşimli mermiler için kaynaklı. Bazen, insanlar beklenen davranışı engellediğinden kaynaklı ~/.bash_profileya ~/.profileda 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ş rcdosyalarından stdout çıktısı ~/.bash_profileyoksa ya da örneğin ~/.profiledü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_profileya ~/.profileda beklenen davranışın müdahale beri yanlıştır Doğru. Eğer kaynak hakkında ne düşünüyorsunuz ~/.bashrcgelen ~/.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
testaracı (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.