2016-08-31 8 views
0

今、ディレクトリにstuffが含まれているかどうかを確認するステートメントを持つbashスクリプトを書いています。Bash IF終了コードのリダイレクトエラー

は今のところ、コードはフォルダが実際に空になったとき、私はLSからの誤差を抑えることがしたい、しかし

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

です。通常、「No such file or directory」と表示されますが、そのファイルを/ dev/nullにリダイレクトします。

(基本的に終了コード1を引き起こす)私は私が望んでいたようには/ dev/nullにすべてをリダイレクトし

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

やってみましたが、それも見つからないように、ディレクトリになります。

これを行う正しい方法は何でしょうか?

+1

空のディレクトリでエラーが発生することはありません。ディレクトリ自体が存在しない場合にのみエラーが発生し、空でない場合はエラーが発生します。 – Barmar

+0

'$ APPLICATIONS'にワイルドカードが含まれていない限り、ディレクトリ名ではなく '/ path/to/directory/*' – Barmar

+0

@Barmar問題のもう一つの側面は、ディレクトリが想定されていた場所が自分の問題であるということです。 * facepalm * –

答えて

1

&>リダイレクトstdoutstderrの両方です。 stderrのみリダイレクトするには、2>を使用してください。

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

おっと。そこに行く。それが問題です。 –

0

APPLICATIONSはどこですか?スクリプトを実行しているときの設定は何ですか?コマンドに対する文は次の操作を実行することで実行するための最良の方法と、そのIを発見した

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 
+0

'ls'コマンドの出力は' test'の引数として使われているので、 'ls'コマンドの出力は実行されません。 – Barmar

+0

角かっこのない良い点は、それを実行しようとします。私は私の答えを変更します。 –