두 번째 답변에서 언급한 대로 쉘 스크립트에서 오류 처리를 구현하려고 합니다.$? 사용에 대한 모범 사례 배쉬에서?
내 스크립트는 다음과 같습니다
#!/bin/bash
try() {
"$@"
code=$?
if [ $code -ne 0 ]
then
echo "oops $1 didn't work"
exit 1
fi
}
try myvar=$(mktemp -p ./)
스크립트는 다음과 같이 종료됩니다.
./test.sh: line 4: myvar=./tmp.scNLzO1DDi: No such file or directory
oops myvar=./tmp.scNLzO1DDi didn't work
오직,
myvar=$(mktemp -p ./)
물론 잘 작동합니다. $myvar는 임시 파일의 전체 경로와 이름을 반환합니다.
try()가 원하는 작업을 수행할 수 있도록 전체 명령문과 그 결과를 try()에 전달하면서 tmp 파일의 이름을 변수 myvar에 할당하는 명령문을 어떻게 얻을 수 있습니까? 감사해요.
답변1
사용되면 인수 목록을 생성하는 동안 호출이 이루어지기 전에 try myvar=$(mktemp -p ./)
with 서브쉘이 실행됩니다.mktmp
try
try
나중에 서브셸을 확장하려면 다음 매개변수를 인용해야 합니다 try
.
try 'myvar=$(mktemp -p ./)'
나중에 확장하려면 첫 번째 줄 eval "$@"
대신 을 사용해야 합니다 ."$@"
try
답변2
평가된 래퍼 대신 오류 트랩을 사용하고 싶다고 생각합니다.
err_handler () {
code=$?
if [ $code -ne 0 ]
then
echo "oops $1 didn't work"
exit 1
fi
}
trap 'err_handler' ERR
myvar=$(mktemp -p ./)
trap ERR