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)。
执行此操作的正确方法是什么?
&>
重定向 stdout
和 stderr
。要仅重定向 stderr
,请使用 2>
.
if [ "$(ls -A $APPLICATIONS 2> /dev/null)" ]; then
APPLICATIONS
从何而来?当您 运行 编写脚本时,它设置了什么?
我发现 运行 针对命令的 if 语句的最佳方法是执行以下操作:
if command; then
do something
fi
在您的情况下,您可以执行以下操作,假设 APPLICATIONS
的格式为 /path/to/folder
或 local/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
我现在正在编写一个 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)。
执行此操作的正确方法是什么?
&>
重定向 stdout
和 stderr
。要仅重定向 stderr
,请使用 2>
.
if [ "$(ls -A $APPLICATIONS 2> /dev/null)" ]; then
APPLICATIONS
从何而来?当您 运行 编写脚本时,它设置了什么?
我发现 运行 针对命令的 if 语句的最佳方法是执行以下操作:
if command; then
do something
fi
在您的情况下,您可以执行以下操作,假设 APPLICATIONS
的格式为 /path/to/folder
或 local/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