.bashrc
오류 코드를 반환할 수 있는 명령의 출력과 동일한 변수를 내부적으로 설정하고 싶습니다 .
나는 이런 일을 했을 때의 결과를 모른다. 이 명령이 실패하더라도 다른 모든 것은 잘 작동합니까?
현재 코드는 .bashrc
간단합니다.
export MYVAR=$(my_dubious_command 2>/dev/null)
이거 안전한가요?
답변1
해 보자:
$ var=$(false)
$ echo $?
1
$
그러나 .bashrc에 이를 설정할 가능성은 거의 없으며 errexit
다음 명령은 명령의 종료 코드를 확인할 가능성이 훨씬 낮으므로 아무 영향도 미치지 않습니다.
.bashrc와 같은 시작 스크립트는 수행할 수 있는 작업 중 하나입니다.아니요set -o errexit
간단한 오타나 제어할 수 없는 변경으로 인해 셸에서 차단될 수 있으므로 이 작업을 수행하고 싶습니다 . 오류를 감지하지만 실패하지 않으려면 다음과 같이 오류를 잡을 수 있습니다.
$ trap 'echo $?' ERR
$ var=$(false)
1
$
이는 매우 유용합니다.빠르게, 예를 들어.
답변2
asl0b0설명하다, .bashrc가 errexit
set으로 실행될 가능성은 없지만 테스트를 통해 이 경우를 처리할 수 있습니다.
case $SHELLOPTS in
(*errexit*) set +e;
export MYVAR=$(my_dubious_command 2>/dev/null);
set -e
;;
(*) export MYVAR=$(my_dubious_command 2>/dev/null)
;;
esac
작성된 대로 명령 은 후속 명령 이 잘못된 옵션을 제공하지 않았는지, 변수 이름이 유효하고 존재하지 않는 함수를 내보내지 않았는지 export
확인하는 경우 0을 반환해야 합니다 .$?
Case 문은 errexit
설정되어 있는지 확인하고, 설정되어 있으면 일시적으로 꺼서 실행합니다 my_dubious_command
.