我现在正在写一个bash脚本,它有一个语句来检查一个目录是否包含东西。
现在,代码是
if [ "$(ls -A $APPLICATIONS)" ]; then
do something
else
do something else
fi
但是,当文件夹确实为空时,我希望抑制ls的错误。通常,它会说"没有这样的文件或目录,"但我想将其重定向到/ dev / null。
我已经尝试过了
if [ "$(ls -A $APPLICATIONS &> /dev/null)" ]; then
这确实将所有内容重定向到/ dev / null,但它也导致找不到目录(实际上导致退出代码1)。
这样做的正确方法是什么?
答案 0 :(得分:1)
&>
重定向stdout
和stderr
。要仅重定向stderr
,请使用2>
。
if [ "$(ls -A $APPLICATIONS 2> /dev/null)" ]; then
答案 1 :(得分:0)
APPLICATIONS
来自哪里?当您运行脚本时,它会设置什么?
我发现对命令运行if语句的最佳方法是执行以下操作:
if command; then
do something
fi
在您的情况下,您可以执行以下操作,假设APPLICATIONS
的格式为/path/to/folder
或local/folder
:
#!/bin/bash
APPLICATIONS="$1"
[[ -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