如果之前在 Bash 中成功(或失败),则运行命令

如果之前在 Bash 中成功(或失败),则运行命令

阅读文档并遵循这个答案,我想用一个简单的例子来测试一下:

测试_1.sh

#!/usr/bin/bash

let x=1/0
echo $x

测试_2.sh

#!/usr/bin/bash

printf "\nThis is 2\n"

但这两种控制流实现都失败:运行test_1,如果不成功,则运行test_2

# Just errors on line 1 of course
./test_1.sh 
if [ $? -ne 0 ]; then
    ./test_2.sh
fi

也失败:

./test_1.sh || ./test_2.sh

关于控制多个脚本之间的流程有什么技巧吗?

答案1

根据您的评论:

我只是有一个这样的过程test_1.sh,可能会导致成功(返回代码 0),也可能导致失败(除 0 之外的任何内容)。我想要类似的东西test_2.sh只在前一种情况下运行。

您想要与问题中的片段相反的内容。

./test_1.sh
if [ $? -ne 0 ]; then
    ./test_2.sh
fi

test_2.sh如果指示失败则运行test_1.sh,同样如此

./test_1.sh || ./test_2.sh 

要运行test_2.sh如果test_1.sh表明成功,以下任何一个都可以工作:

./test_1.sh
if [ $? -eq 0 ]; then
    ./test_2.sh
fi
if ./test_1.sh; then
    ./test_2.sh
fi
./test_1.sh && ./test_2.sh

shell 的控制和重定向运算符是什么?了解详情。

test_1.sh尽管被零除,你的电流始终表明成功。看忽略或捕捉除以零了解详情。

相关内容