如何在其他命令成功运行后才能运行命令?

时间:2011-12-06 16:33:43

标签: linux bash

在bash中,我知道如果我希望仅在命令&&成功后运行命令B,我应该使用A

A && B

但是,如果我希望D仅在ABC成功后才能运行,该怎么办? 是

 'A&B&C' && D

OK?

此外,如果我想确切地知道哪个命令失败,我应该怎么办?ABC(因为它们会多次运行,需要一段时间如果我逐一检查。)

一旦命令失败,错误信息是否可能会自动输出到文本文件?

就我而言,ABCcurlBrm,我的脚本如下:

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

4 个答案:

答案 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_EXITB_EXITC_EXIT告诉您ABC命令中的哪些(如果有)失败。您可以在每个命令后输出一个额外的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条件,还可以让您知道哪个命令失败。

这可能不是问题的完美答案,但认为这可能对某人有所帮助。