2012-03-26 51 views
1

私はタスクラッパーとして機能し、タスクが失敗した場合にユーザーに電子メールを送るスクリプトを持っています。Bash execラッパースクリプト - 引数として渡される複数のコマンド

タスクは、スクリプトの引数として渡されます。複数のコマンドを実行する必要があるときに問題が発生するのは、タスクargが"echo this; echo that"のときに次の行がスクリプトに渡されたとすると、が出力されます。エコーその

それでは、入力コマンド文字列をループせずに複数のコマンドを実行する最も簡単な方法は何ですか?チャー

簡単な例:

FIRST=$1 
TASK=$* 
echo run 
echo "emailing $FIRST" 
$TASK 
echo done 

と我々は./wrapper.sh "[email protected]" "echo this; echo that"

提案を使用することになり、このスクリプトを実行するには?

答えて

3

あなたはsh -c経由で文字列$TASKを実行する場合は、任意の多くの作業行う必要がないかもしれません。

$ sh -c "echo this ; echo that" 
this 
that 
$ 
+0

感謝を - コマンド文字列のいずれかのコマンドが失敗した場合、戻り値を取得するにはとにかくがあります。 "echo this; dsddsdsd; echo that"と言っても、中間のコマンドは失敗します(まだ見つかりません)$?エコーが成功すると依然として0になります。ですから、問題はshを-eスイッチを使って失敗すると停止することができますが、各コマンドを実行してゼロ以外のエラーを返すことができます(ショットに値するとは思えません)。 – NightWolf

+1

Hrm、私はそれを行うための簡単なメカニズムを考えることはできません。複数のコマンドを複数の引数として受け入れるようにスクリプトを変更することはできますか?例えば'wrapper.sh alert @ hostname"これをエコー "echo?" – sarnold

関連する問題