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