Bash 如何将控制运算符| |和&;的命令组合在一起&;?
我希望能够将命令组合在一起,以便在一组命令中的一个失败时,执行另一个命令,即Bash 如何将控制运算符| |和&;的命令组合在一起&;?,bash,shell,Bash,Shell,我希望能够将命令组合在一起,以便在一组命令中的一个失败时,执行另一个命令,即 $ ping 1; echo 1 || echo 2 将返回相当于 $ ping 1; echo 2 结果 connect: Invalid argument 2 i、 e.前两个命令ping 1和echo 1应组合在一起,以便如果其中一个失败,将执行第三个echo 2 我试过的东西 $(ping 1;echo 1)| echo 2 $((ping 1;echo 1))| | echo 2 $[[ping 1
$ ping 1; echo 1 || echo 2
将返回相当于
$ ping 1; echo 2
结果
connect: Invalid argument
2
i、 e.前两个命令ping 1
和echo 1
应组合在一起,以便如果其中一个失败,将执行第三个echo 2
我试过的东西
$(ping 1;echo 1)| echo 2
$((ping 1;echo 1))| | echo 2
$[[ping 1;echo 1]| | echo 2
${ping 1;echo 1;}| | echo 2
$eval“ping 1;echo 1”| | echo 2
$函数try_ping{ping 1;echo 1;};try_ping|echo 2
EDIT我仍然需要运行第一组中的所有命令,因此
&&
对我不起作用
function my_ping {
local exit=0
command1
exit=$(( exit + $? ))
command2
exit=$(( exit + $? ))
if [[ "$exit" -ne "0" ]]; then
command3
fi
}
这个怎么样
OK=1
ping 1 || OK=0
echo 1 || OK=0
[[ "$OK" == "0" ]] && echo 2
这个怎么样
OK=1
ping 1 || OK=0
echo 1 || OK=0
[[ "$OK" == "0" ]] && echo 2
例如:
ls && tree && echo success || echo epic fail
如果命令ls
或tree
失败,则会打印“epic fail”。示例:
ls && tree && echo success || echo epic fail
darby@darbycrash:~$ ping 1 2>/dev/null && echo 1 || echo 2
2
darby@darbycrash:~$
如果命令ls
或tree
失败,将打印“epic fail”
darby@darbycrash:~$ ping 1 2>/dev/null && echo 1 || echo 2
2
darby@darbycrash:~$
您可以同时使用&&来运行命令,如果其中一个失败,则链将断开。
这是您的示例,但已修复。
享受
另外,我已将错误消息重定向到null
编辑后更新
darby@Debian:~/Scrivania$ bash ex
Command "curl -sSL google.com" returned value 0
Command "echo 1" returned value 0
Command "ping localhost -c 1" returned value 0
Command "ls" returned value 0
Command "false" returned value 1
I must run second group of commands because something have not worked!
2
darby@Debian:~/Scrivania$ bash ex
Command "curl -sSL google.com" returned value 0
Command "echo 1" returned value 0
Command "ping localhost -c 1" returned value 0
Command "ls" returned value 0
Command "true" returned value 0 # I have changed false to true in the command array
All is gone without issues! Goodbye darby!
darby@Debian:~/Scrivania$
此脚本运行第一个组的所有命令,如果有人退出而没有退出代码0,则设置一个变量,使用if运行第二个组,或提醒您不需要更多命令即可不运行任何内容:
#!/bin/bash
function check () {
$1 >/dev/null 2>&1
echo $?
}
command=("curl -sSL google.com" "echo 1" 'ping localhost -c 1' 'ls' 'false')
for ((i=0;i<${#command[@]};i++)); do
echo "Command \"${command[$i]}\" returned value $(check "${command[$i]}")"
if (($(check "${command[$i]}") != 0)); then second=1; fi
done
if ((second == 1)); then
echo "I must run second group of commands because something have not worked!"
echo 2
else
echo "All is gone without issues! Goodbye $USER!"
exit 0
fi
您可以同时使用&&来运行命令,如果其中一个失败,则链将断开。
这是您的示例,但已修复。
享受
另外,我已将错误消息重定向到null
编辑后更新
darby@Debian:~/Scrivania$ bash ex
Command "curl -sSL google.com" returned value 0
Command "echo 1" returned value 0
Command "ping localhost -c 1" returned value 0
Command "ls" returned value 0
Command "false" returned value 1
I must run second group of commands because something have not worked!
2
darby@Debian:~/Scrivania$ bash ex
Command "curl -sSL google.com" returned value 0
Command "echo 1" returned value 0
Command "ping localhost -c 1" returned value 0
Command "ls" returned value 0
Command "true" returned value 0 # I have changed false to true in the command array
All is gone without issues! Goodbye darby!
darby@Debian:~/Scrivania$
此脚本运行第一个组的所有命令,如果有人退出而没有退出代码0,则设置一个变量,使用if运行第二个组,或提醒您不需要更多命令即可不运行任何内容:
#!/bin/bash
function check () {
$1 >/dev/null 2>&1
echo $?
}
command=("curl -sSL google.com" "echo 1" 'ping localhost -c 1' 'ls' 'false')
for ((i=0;i<${#command[@]};i++)); do
echo "Command \"${command[$i]}\" returned value $(check "${command[$i]}")"
if (($(check "${command[$i]}") != 0)); then second=1; fi
done
if ((second == 1)); then
echo "I must run second group of commands because something have not worked!"
echo 2
else
echo "All is gone without issues! Goodbye $USER!"
exit 0
fi
当您编写
ping 1
时,您的意思是仅作为示例吗?“无效参数”来自ping。@dbalakirev是的,它只是一个示例。当您编写ping 1
时,您的意思是仅作为示例吗?“无效参数”是ping发出的。@dbalakirev是的,这只是一个示例。我需要第二个命令运行,即使第一个命令失败。很抱歉,措辞含糊不清,我已更新以澄清我的答案。我已更新了我的代码。我希望这能帮到你。;)我需要第二个命令运行,即使第一个命令失败。很抱歉措辞含糊不清,我已更新为clar通知我的答案。我已经更新了我的代码。我希望这能对你有所帮助。;)我需要第二个命令来运行,即使第一个失败。很抱歉,措辞含糊不清,我已经更新以澄清我的答案。我需要第二个命令来运行,即使第一个失败。很抱歉措辞含糊不清,我已经更新以澄清我的答案。