使用 && 的 bash 脚本不会因错误而停止

jak*_*dog 9 bash

我有一个脚本,我在没有底层文件的情况下意外运行了一个脚本,并且我的脚本没有检查该文件,因为当需要该文件的命令退出时,该脚本应该停止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命令很奇怪。

Nah*_*eul 6

&&适用于下一个命令,对于一个序列,必须添加大括号:

#!/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)