if 조건 내의 변수로 stderr을 리디렉션하는 방법은 무엇입니까? 불다

if 조건 내의 변수로 stderr을 리디렉션하는 방법은 무엇입니까? 불다

mkdir -p $FINAL_BACKUP_DIR나는 stderr 통신 을 얻고 logger.

이는 로그를 더욱 완전하게 만듭니다. 예를 들어 사용자는 자신에게 권한이 없거나 $FINAL_BACKUP_DIR존재하지 않는다는 사실을 알게 됩니다.

if ! mkdir -p $FINAL_BACKUP_DIR; then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Standard error communicate. Backup canceling." 1>&2
    exit 1;
fi;

나는 다음과 같은 것을 시도합니다 :

if ! mkdir -p $FINAL_BACKUP_DIR 2>> ${test1}; then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling. $test1" 1>&2
    exit 1;
fi;

하지만 이 솔루션은 두 가지 면에서 나에게 적합하지 않습니다. 내가 test1더 일찍 만들었을 때인 test1=0지 아닌지.

우분투 14.04를 사용합니다.

답변1

/dev/null"물건을 버리기" 위한 표준 장치입니다.

그래서

some_command 2> /dev/null

some_command에서 로 오류를 보냅니다 /dev/null. 즉, 오류를 삭제합니다.

그러므로:

if ! mkdir -p $FINAL_BACKUP_DIR 2> /dev/null
then
  logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling."
  exit 1
fi

추가 문자가 모두 필요하지는 않습니다 ;. :-)

편집하다:

또한 오류를 출력하여 변수에 결과를 캡처하고 변수가 비어 있는지 테스트할 수도 있습니다. 이렇게 하면 사용자에게 이유를 알릴 수 있습니다.

result=$(mkdir -p $FINAL_BACKUP_DIR 2>&1)
if [ -n "$result" ]
then
  logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling: $result"
  exit 1
fi

답변2

노력하다

if ! mkdir -p $FINAL_BACKUP_DIR > ${test1} 2>&1
then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling. $(< ${test1})" 
    exit 1;
fi;

어디

  • > ${test1}출력 리디렉션(표준 출력)
  • 2>&1bash에게 stderr과 stdout을 병합하라고 지시하세요.
  • $(< $test1)파일 내용 읽기${test1}
  • 삭제해야 합니다${test1}
  • 우분투 15.X에서 테스트되었으며 효과적입니다.${test1}

관련 정보