2016-11-16 27 views
0

bashスクリプトはいくつかのコマンドを実行します。 各コマンドの後に、どのように:各コマンドの後、成功した場合:カスタムメッセージを表示します。エラー:エラーを表示し、ファイルに送信

  • 成功の場合:コンソールのカスタムメッセージを表示し、エラーならば、ログ・ファイル
  • に追加します:にエラーメッセージを追加し、コンソールにエラーメッセージを表示しますスクリプト全体ここ

を私がどこにあるファイルを記録し、再開:

log_file="log.txt" 
output() { 
    echo [email protected] 
    echo [email protected] 2>&1 >> $log_file; 
    if [ [email protected] -eq 0 ] 
    then 
    exit 1 
    fi 
} 

し、各コマンドの後:

繰り返しの多くを作る
if [ $? -eq 0 ] 
then 
    output "Custom message" 
else 
    output $? 
fi 

...

+0

(あなたが試したもの):あなたは答えを得るかもしれません。あなたがしなければ、おそらくあなたはしません。 – isedev

+0

@isedev私は私の質問 –

答えて

1

あなたは繰り返しを制限するために、「実行」機能を作成することができます。

run() 
{ 
    message="$1" 
    shift 
    eval "$*" 
    if [ $? -eq 0 ]; then 
    output "$message" 
    else 
    output $? 
    fi 
} 

、単純にすべてのコマンドの前に付ける:コマンドを

run "message" "command" 

それはシェルが含まれている場合のみ、引用される必要があるメタ - 表現。

+0

を編集クール!各コマンドに特定のカスタムメッセージメッセージを渡す方法は?それに応じて編集された –

+1

... "run"の最初の引数としてカスタムメッセージを渡して引用符で囲みます。 – isedev

+1

には、複雑な引用符で囲まれたコマンドを "実行"機能に渡すための "eval"が追加されました(例: "this | that && ok")。 – isedev

0

次のコマンドは、あなたの最後の実行コマンドの終了ステータスを与えます。

$?

例えばあなたは、あなたが成功を意味0として終了ステータスが表示されます、次の

echo $?

を実行する場合は、その後、「LS」コマンドを実行すると言うことができます。ゼロ以外の終了ステータスは、失敗を意味します。

これは、シェルスクリプト内で何らかの形で使用でき、終了値に基づいて行う必要があります。

0

これを達成する方法は次のとおりです。追跡する各コマンドの後に、次の行を追加します。

rc="$?"; if [ "$rc" -eq 0 ]; then echo "Custom message" 2>&1 | tee -a /folder/log; else echo "$rc" 2>&1 | tee -a /folder/log; fi 
関連する問題