2011-12-06 13 views
5

は、私は、コマンドBコマンドAが成功した後にのみ実行したい場合、私は&&を使用する必要があります知っている:他のコマンドが正常に実行された後にコマンドを実行するにはどうすればよいですか? bashで

A && B 

しかし、私はDは、すべての後にのみABCを実行する場合はどのような成功? は

'A&B&C' && D 

OKですか?私は(彼らは何度も実行されますように私は、一つ一つをチェックすると、それはしばらく時間がかかります)ABCの間で、失敗したコマンドを正確に知りたい場合は

はほかに、私は何をすべき。

コマンドが失敗するとすぐにエラー情報が自動的にテキストファイルに出力される可能性がありますか?私の場合は

ABCcurlBながらがrmであり、そして私のスクリプトは、このようなものです:

for f in * 
do 
    curl -T server1.com 
    curl -T server2.com 
    ... 
    rm $f 
done 
+0

'A'が失敗すると' B'と 'C'を実行しますか? 'A && B && C && D'はコマンドが失敗するとすぐに終了します。しかし、無条件に 'A'、' B'、 'C'を実行し、全て成功した場合にのみ' D'を実行したい場合は、@ Adamの答えを見てください。 (いいえ、 'A&B&C && D'はあなたが望むことをしません;単一の'& 'はバックグラウンドでコマンドを実行させます) –

+0

編集ありがとうございました:) – erical

+0

おそらくかっこを使用できますか? – Gabriel

答えて

0

あなたはすなわち

を行うことによって、前のコマンドからのリターンを得ることができますコマンド;エコー$?

1 =より構造化されたフォーマット、例で 0 =成功

を失敗しました:変数はA_EXITB_EXITC_EXITはどのあなたを教えて

A; A_EXIT=$? 
B; B_EXIT=$? 
C; C_EXIT=$? 
if [ $A_EXIT -eq 0 -a $B_EXIT -eq 0 -a $C_EXIT ] 
then 
    D 
fi 

:これを試してみてください

cat /var/log/secure 
    if [ $? -ne "1" ] ; then 
    echo "Error" ; exit 1 
    fi 
+0

ありがとうございました:) – erical

5

もしあれば、A,BCコマンド失敗しました。それぞれのコマンドの後に、ifの余分な文でファイルに出力することができます。

A; A_EXIT=$? 
if [ $A_EXIT -ne 0 ] 
then 
    echo "A failed" > text_file 
fi 
+0

あなたの助けていただきありがとうございます。 "$?"私はしばしばbashスクリプトでそれを満たしているようですが、それはgoogleで検索することはできません – erical

+0

$?最後のフォアグラウンドコマンドのステータスを保持するシェルの特殊変数です。これらのものを検索する良い場所の1つはbashのマンページです:http://linux.die.net/man/1/bash –

+0

ああ、ありがとう!本当に助けてくれるサイトです – erical

1

なぜコマンドを配列に格納してから、それを反復処理して1つ失敗したら終了しますか?

#!/bin/bash 

commands=(
    [0]="ls" 
    [1]="ls .." 
    [2]="ls foo" 
    [3]="ls /" 
) 

for ((i = 0; i < 4; i++)); do 
    ${commands[i]} 
    if [ $? -ne 0 ]; then 
     echo "${commands[i]} failed with $?" 
     exit 
    fi 
done 
+0

ありがとうございました:) – erical

関連する問題