Bash IF退出代码重定向错误

时间:2016-08-31 23:52:41

标签: bash if-statement redirect scripting exit-code

我现在正在写一个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)。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

APPLICATIONS来自哪里?当您运行脚本时,它会设置什么?

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

if command; then
    do something
fi

在您的情况下,您可以执行以下操作,假设APPLICATIONS的格式为/path/to/folderlocal/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