-1

何かを処理するための bash スクリプト ファイルがあります。

control.sh :

c_command="echo 'Hello'; echo ', Stack Overflow';exit 9";
$c_command;
stat=$?;

if [ $stat -eq 0 ];then
      echo 'Do something....'
elif [ $stat -eq 9 ];then
      echo 'The system will be rebooting...';
else
      echo "..."
fi

変数 $c_command を使用してコマンドを実行すると、終了コードが 9 ではなく 0 になります。コマンド ラインに貼り付けると完璧に動作しますが、スクリプトで実行すると非常に悪いです。

通常、スクリプトで「exit」コマンドを実行すると、スクリプトは終了します。そして、スクリプトではなくコマンドを実行し、実行されたコマンドから終了コードを取得したいだけです。

私はこの問題を解決しました:

$c_command のコードをスクリプト ファイルに入れて実行します。

c_command="echo 'Hello'; echo ', Stack Overflow';exit 9";
echo "${c_command}" > tmp.sh;
/bin/bash tmp.sh;
stat=$?;

if [ $stat -eq 0 ];then
      echo 'Do something....'
elif [ $stat -eq 9 ];then
      echo 'The system will be rebooting...';
else
      echo "..."
fi
4

1 に答える 1

2

スクリプトが実際に出力するものを見てみましょう。これにより、終了ステータスが 0 である理由の手がかりが得られるはずです。

$ bash ./control.sh
'Hello'; echo ', Stack Overflow';exit 9
Do something....

が展開された後c_command、セミコロンはコマンド セパレータとしてではなく、リテラル文字として扱われます。その結果、コマンドの後に続くコマンドechoのペアではなく、0 で終了する単一のコマンドが作成されます。echoexit

コードを文字列に格納する代わりに、関数を使用する必要があります。

c_command () {
    echo 'Hello'; echo ', Stack Overflow';return 9 
}
c_command
stat=$?
于 2013-04-12T03:30:16.893 に答える