有时我会经常连续调用两个命令。但是,第二个命令仅在第一个命令成功的情况下才有意义。
我想做这样的事情:
#!/bin/bash
if [ $? -gt 0 ]
then
echo "WARNING: previous command entered at the shell prompt failed"
fi
但它不起作用:
t@quad:~$ echo "abc" | grep def
t@quad:~$ ./warnme.sh
Last command succeeded
我想要的是有点像这样:
t@quad:~$ echo "abc" | grep def
t@quad:~$ echo ${PIPESTATUS[1]}
1
我们可以清楚地看到最后一个命令失败。
我想要的结果:
t@quad:~$ echo "abc" | grep def
t@quad:~$ ./warnme.sh
WARNING: previous command entered at the shell prompt failed
我找不到办法。
答案 0 :(得分:3)
command1 && command2
完全符合您的要求:仅当command1成功时才执行命令2。例如,您可以这样做:
ls a.out && ./a.out
然后只有在列出时才会执行a.out。我在http://www.linuxintro.org/wiki/%26%26
上记录了这个问题答案 1 :(得分:1)
怎么样:
echo "abc" | grep def || ./warnme.sh
凡warnme.sh现在只是没有测试的警告。只有在第一个命令失败时才会调用它。
换句话说,它将与:
相同echo "abc" | grep def || echo "WARNING: That didn't work..."
答案 2 :(得分:0)
一个选项是只在前一个成功的命令列表之前放置它:
set -e
如果脚本后面的任何命令返回非零(通常是失败),这将退出脚本。您可以使用以下命令再次将其关闭:
set +e
或者,如果您只想将其关闭一行,您可以将逻辑 - 或命令与true:
mycommand || true
对于我的很多脚本,我已经在脚本的顶部设置-e作为安全功能,以防止脚本级联并做一些危险的事情。