명령 오류를 리디렉션할 수 없습니다.

명령 오류를 리디렉션할 수 없습니다.

디렉토리에서 파일을 검색하고 그에 따라 적절한 메시지를 인쇄하려고 합니다. 하지만 원하는 결과를 얻지 못하고 있습니다. 예를 들어. 파일이 디렉터리에 있으면 결과는 예상대로이지만 파일이 없으면 출력은 다음과 같습니다.

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

관련 정보