条件式のman bash
下から:
-t fd
True if file descriptor fd is open and refers to a terminal.
fd 1が標準出力であるとするとif [ -t 1 ]; then
、うまくいくはずです。高度なシェルスクリプトガイドの主張-t
をこのように使用がフェイルオーバーしますssh
、そしてテストという(STDINを使用して、stdoutがない)ので、次のようになります。
if [[ -t 0 || -p /dev/stdin ]]
-p
ファイルが存在し、名前付きパイプであるかどうかをテストします。 ただし、これは私には当てはまりません。-p /dev/stdin
通常のターミナルセッションとsshセッションの両方で失敗するのに対し、if [ -t 0 ]
(または-t 1
)はどちらの場合でも機能します(高度なシェルスクリプトガイドのそのセクションの問題に関するGillesのコメントも参照してください)。
主要な問題がスクリプトを呼び出してそのコンテキストに適した方法で動作したい特殊なコンテキストである場合、ラッパーとカスタム変数を使用することにより、これらすべての専門性を回避して、多少の手間を省くことができます。
!#/bin/bash
export SPECIAL_CONTEXT=1
/path/to/real/script.sh
これを呼び出すlive_script.sh
か、代わりにダブルクリックします。もちろん、コマンドライン引数を使用して同じことを行うこともできますが、GUIファイルブラウザーでポイントアンドクリックを実行するには、ラッパーが必要です。