Bash IF 退出代码重定向错误

Bash IF exit code redirect errors

我现在正在编写一个 bash 脚本,它有一个语句来检查目录是否包含内容。

现在,代码是

if [ "$(ls -A $APPLICATIONS)"  ]; then
    do something
else
    do something else
fi

但是,当文件夹确实为空时,我希望 ls 的错误被抑制。通常,它会说 "No such file or directory," 但我想将其重定向到 /dev/null.

我试过

if [ "$(ls -A $APPLICATIONS &> /dev/null)"  ]; then

这确实像我想要的那样将所有内容重定向到 /dev/null,但它也会导致找不到目录(基本上导致退出代码 1)。

执行此操作的正确方法是什么?

&> 重定向 stdoutstderr。要仅重定向 stderr,请使用 2>.

if [ "$(ls -A $APPLICATIONS 2> /dev/null)"  ]; then

APPLICATIONS从何而来?当您 运行 编写脚本时,它设置了什么?

我发现 运行 针对命令的 if 语句的最佳方法是执行以下操作:

if command; then
    do something
fi

在您的情况下,您可以执行以下操作,假设 APPLICATIONS 的格式为 /path/to/folderlocal/folder:

#!/bin/bash

APPLICATIONS=""

[[ -z "$APPLICATIONS" ]] && exit 1    # Exit if APPLICATIONS is not set.

if ls -A -- "$APPLICATIONS"/* &>/dev/null; then
    echo do something    # Directory is not empty
else
    echo do something else     # Directory is empty
fi