查找 for 循环内的命令行为

查找 for 循环内的命令行为

我在 bash 脚本中有以下部分代码。

for dir in $(find /etc/aaa -type d -maxdepth 1)
do
 #my code
done

#my code

如果/etc/aaa目录不存在,那么我想退出脚本并出现一些错误。

我知道我可以在执行 for 循环之前测试目录是否存在。

但我想知道是否有其他方法(仅在 for 循环中的短方法),这样如果目录/etc/aaa不存在,那么它应该退出,否则脚本应该继续。

在当前情况下,脚本给出错误find: /etc/aaa: No such file or directory并在 for 循环后继续剩余部分。

for循环的退出状态也是0。

答案1

你可以这样做:

if dirs="$(find /etc/aaa -type dir -maxdepth 1 2> /dev/null)"; then
    for dir in ${dirs}; do
        # Your code
    done
    # Your code
else
    # find failed, generate error
fi

答案2

我不明白为什么你想在执行过程中退出循环。如果您想要的目录不存在,我认为不值得执行循环。

我认为你应该做一些事情:

if [ ! -d /etc/aaa ]; do
    echo "Error"
    exit 1
else
    for files in $(ls /etc/aaa); do
        # code
    done
    # more code
fi

如果这根本不是您想要的,请解释您想要实现的目标。

答案3

我认为在循环之前进行逻辑测试更容易。但这是对 for 语句的修改:

for dir in `! find /etc/aaa -type d -maxdepth 1 2>/dev/null && echo error && exit`;
do
//your code
done

//your code

这也将抑制 stderr寻找

相关内容