在bash中,我知道如果我希望仅在命令&&
成功后运行命令B
,我应该使用A
:
A && B
但是,如果我希望D
仅在A
,B
,C
成功后才能运行,该怎么办?
是
'A&B&C' && D
OK?
此外,如果我想确切地知道哪个命令失败,我应该怎么办?A
,B
和C
(因为它们会多次运行,需要一段时间如果我逐一检查。)
一旦命令失败,错误信息是否可能会自动输出到文本文件?
就我而言,A
,B
,C
为curl
而B
为rm
,我的脚本如下:
for f in *
do
curl -T server1.com
curl -T server2.com
...
rm $f
done
答案 0 :(得分:5)
试试这个:
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
变量A_EXIT
,B_EXIT
和C_EXIT
告诉您A
,B
,C
命令中的哪些(如果有)失败。您可以在每个命令后输出一个额外的if
语句中的文件,例如
A; A_EXIT=$?
if [ $A_EXIT -ne 0 ]
then
echo "A failed" > text_file
fi
答案 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
答案 2 :(得分:0)
你可以通过做
从上一个命令中获得回报命令; echo $?
1 =失败 0 =成功
以更结构化的格式,例如:
cat /var/log/secure
if [ $? -ne "1" ] ; then
echo "Error" ; exit 1
fi
答案 3 :(得分:0)
如果命令成功或失败(根据this StackExchange的回答),有条件地执行某些操作
if command ; then
echo "Command succeeded"
else
echo "Command failed"
fi
您可以开发此简单的代码来执行多个if条件,还可以让您知道哪个命令失败。
这可能不是问题的完美答案,但认为这可能对某人有所帮助。