我有一个脚本,我在没有底层文件的情况下意外运行了一个脚本,并且我的脚本没有检查该文件,因为当需要该文件的命令退出时,该脚本应该停止1。
我被抓住了,因为它继续并跳过了我作为一些保护措施的sleep命令和测试。||exit 0 if我真的很想知道为什么。如果前面的命令没有失败,则 if 测试和退出将起作用。
如果我剥离脚本,我可以看到一些意外的行为,其中脚本不会停止&&并跳过下一个sleep命令。
这不是正确的使用方法吗&&?
你可以在这里测试一下:
#!/bin/bash
mkdir /root/simulatecomplexcommandthatreturns1 &&
sleep 5m
echo "let's go ahead and delete all the stuff"
find /blah/ -delete
Run Code Online (Sandbox Code Playgroud)
这是在 Debian 9 上
编辑:
为了清楚起见,我希望脚本在遇到错误时停止,并且我有&&. 我只是觉得它没有运行sleep命令很奇怪。
只&&适用于下一个命令,对于一个序列,必须添加大括号:
#!/bin/bash
mkdir /root/simulatecomplexcommandthatreturns1 && {
sleep 5m
echo "let's go ahead and delete all the stuff"
find /blah/ -delete
}
Run Code Online (Sandbox Code Playgroud)
或者为了避免缩进级别,可以反转条件
#!/bin/bash
mkdir /root/simulatecomplexcommandthatreturns1 || {
echo "something goes wrong"
exit 1
}
# ok, continue
sleep 5m
echo "let's go ahead and delete all the stuff"
find /blah/ -delete
Run Code Online (Sandbox Code Playgroud)