Bash:ソーススクリプトが「-x」で実行されているかどうかをテストします。

Bash:ソーススクリプトが「-x」で実行されているかどうかをテストします。

Bashスクリプトが実行されているかどうかをテストできますか-x

一部のリモートスクリプトも実行するスクリプトを作成していますが、次のことができるようにしたいと思います。

USE_X="$( run_with_x && "-x" || "" )"
ssh $host "bash $USE_X some_script.sh"

答え1

$-変数だけを見てください。

USE_X=`case "$-" in *x*) echo "-x" ;; esac`

(はい、grepを呼び出さずにこれを行いました。pidを保存してください!)

答え2

この式は、スクリプトが ""(空白)で実行されている場合は-xtrue、そうでない場合、式は "-x"です。[[ $- =~ x ]]-x$([[ $- =~ x ]] && echo "-x")

答え3

それはおそらく最も簡単な解析方法$-です。ダグブラウン方式(また純粋bash)、しかしcase逆引用符を使用しない(サブシェル):

if  [[ ${-/x} != $- ]] ; then USE_X="-x"; fi

短く:

[[ ${-/x} != $- ]] && USE_X="-x"

[[これはいいえtestのように組み込み関数を呼び出し[ますが、bash構文の設定(man bashおよびこの開発者はお勧めします)。だから私はそれが「より純粋なレイブ」だと主張します。 ;)

答え4

Bashのマニュアルページのドキュメントはset -o xtracethisと同じです。set -xこれは-xシェルの引数と同じです。 (これまでは、-o option「システムがユーザー移植性ユーティリティオプションをサポートしている場合」という注意事項とともに、SUSv3 shと互換性があります。)

また、オプションがない場合は、すべてのオプションの現在の状態がset -o印刷されます。-o(SUSv3もこれを指定しますが役に立ちません。フォーマットされていないため、実行中のシェルがbashに似たフォーマットを使用していることがわかっている場合にのみ使用できます。)

したがって、パイプはset -o | grep xtrace | grep -q onあなたが探しているものでなければなりません。

関連情報