コマンドエラーをリダイレクトできません。

コマンドエラーをリダイレクトできません。

ディレクトリからファイルを検索し、それに応じて適切なメッセージを印刷しようとします。しかし、望む結果が得られません。例えば。ファイルがディレクトリにある場合、結果は期待どおりですが、ファイルが存在しない場合、出力は次のようになります。

ls: cannot access 'Voucher_Sales_Order_Report_202305*.unl': No such file or directory

内部のギター

Elseブロックは正確ですが、上記のlsからエラーメッセージを削除したいと思います。 /dev/nullを試しましたが、まだ機能しません。助けてください

#/bin/bash

cd /applogs/NFS_SO_PROCESSING
d=`date -d '1 month ago' '+%Y%m'`
filename=`ls Voucher_Sales_Order_Report_$d*.unl`

if [ "$filename" ]
then
        echo "Inside IF"
else
        echo "Inside Else"
fi

ベストアンサー1

しなければならない:

#! /bin/bash -
shopt -s nullglob

cd /applogs/NFS_SO_PROCESSING || exit

info() {
  [ "$#" -eq 0 ] || printf '%s\n' "$@"
}

die() {
  info >&2 "$@"
  exit 1
}

d=$(date -d '1 month ago' '+%Y%m')
filename=(
  Voucher_Sales_Order_Report_"$d"*.unl
)
 
case ${#filename[@]} in
  (1) info 'OK, one matching file';;
  (0) die 'ERROR, no matching file';;
  (*) die 'ERROR, more than one matching file';;
esac

do-what-you-like with "$filename", same as "${filename[0]}" in bash

おすすめ記事