Gönderen man bash
altında ŞARTLI ANLATIM :
-t fd
True if file descriptor fd is open and refers to a terminal.
Fd 1'in standart olarak kabul if [ -t 1 ]; then
edilmesi, sizin için çalışmalıdır. Gelişmiş Shell Scripting Guide iddiaları -t
bu şekilde kullanılan başarısız olur ssh
ve testin ki (Stdin kullanarak değil stdout'u) bu nedenle olmalıdır:
if [[ -t 0 || -p /dev/stdin ]]
-p
bir dosyanın var olup olmadığını ve adlandırılmış bir kanal olup olmadığını test eder. Bununla birlikte , deneyimsel olarak bunun benim için doğru olmadığını not ederim: -p /dev/stdin
hem normal terminaller hem de ssh oturumları için başarısız olurken if [ -t 0 ]
(veya -t 1
) her iki durumda da çalışır ( Gelişmiş Kabuk Komut Dosyası Kılavuzu'nun bu bölümündeki sorunlar hakkında aşağıdaki Gilles yorumlarına bakın ).
Birincil sorun, bu bağlama uygun bir şekilde davranması için komut dosyasını çağırmak istediğiniz özel bir bağlamsa, bir sarmalayıcı ve özel bir değişken kullanarak tüm bu teknikleri kaldırıp kendinize biraz yaygara kaydedebilirsiniz:
!#/bin/bash
export SPECIAL_CONTEXT=1
/path/to/real/script.sh
Buna live_script.sh
ya da her neyse çağırın ve bunun yerine çift tıklayın. Elbette aynı şeyi komut satırı argümanlarında da yapabilirsiniz, ancak bir GUI dosya tarayıcısının çalışmasını sağlamak ve tıklatmak için bir sarıcıya ihtiyaç duyulur.