누군가 존재하지 않는 명령을 호출한다고 가정해 보겠습니다. 이후에 실행하는 스크립트에서 해당 오류 상태를 검색하는 유일한 방법은 다음을 사용하는 것입니다.source
즉, 스크립트의 이름이 dummy
해당 콘텐츠의 위치에 있다고 가정합니다.
#!/bin/bash
echo $?
전화하면 내가 찾고 있는 (127) 종료 상태만 얻을 수 있다는 것을 알고 있지만 , 이를 사용하지 않고 스크립트 내부의 마지막 명령에서 종료 상태를 얻는 source dummy
데 도움이 될 수 있는 다른 방법이 있습니까? 내가 원하는 동작을 얻기 위해 간단히 전화를 걸 수 있습니까 ?alias
source
dummy
이전 명령의 오타를 확인하는 스크립트를 작성하고 싶습니다. 이를 위해서는 처음에 잠재적인 오타가 있는지 확인하기 위해 이전 종료 상태를 감지해야 하므로 스크립트에서 마지막 명령의 종료 상태를 가져올 수 있어야 합니다. 또한 사용자가 수행해야 하는 설정의 양을 최소화하여 사용자가 간단히 전화만 걸면 dummy
나머지는 알아서 처리되도록 하고 싶습니다. 그래서 나는 source
"또는" .
이나 "또는" 을 피하려고 노력합니다 alias
.
마지막 명령의 종료 상태에 대한 초기 테스트는 다음을 사용하는 것이었습니다.
#!/bin/bash
ESTATUS=$? # Saved exit status for later
echo $ESTATUS
하지만 이를 위해서는 , 또는 를 source
사용하지 않고도 이를 복제할 수 있는 좋은 방법이 있습니까 ?source
.
답변1
이 스크립트를 사용할 수도 있습니다https://github.com/rcaloras/bash-preexec(논의https://superuser.com/questions/175799/does-bash-have-a-hook-that-is-run-before-executing-a-command) precmd() 함수를 사용하여 $?
답변2
이것이 무엇으로 이어질지 잘 모르겠지만 다음과 같이 할 수 있습니다.
alias dummy='sh dummy $?'
the_program_with_errors
dummy
스크립트 dummy
에는 다음이 포함됩니다.
echo $1
다른 방법은 alias
쉘 함수를 사용하는 것입니다.
function dummy { sh dummy $? ;}
이 정의를 사용하면 다음과 같은 동작을 얻을 수 있습니다( 및 하위 쉘 프로세스를 사용하여 에뮬레이트됨 true
) false
.
$ true
$ dummy
0
$ false
$ dummy
1
$ (exit 42)
$ dummy
42
답변3
당신이 호출하는 스크립트는 당신이 원하는 응답을 제공해야 할 것 같습니다. 명령을 테스트하고 이러한 스크립트에서 특정 종료 코드를 사용하는 방법은 다음과 같습니다.
#!/bin/bash
# Test for the existence of a command in the path.
command=typo_command
if [[ ! $(command -v $command) ]]; then
echo "$command does not exist"
exit 127 # or the code you choose
fi
답변4
함수를 작성하다
쉘은 프로세스이며 값은 $?
. 귀하의 스크립트는 별도의 하위 프로세스이며그 자체의 가치가 있다$?
.
$?
자신에게 속한 쉘을 확인하려면 쉘 프로세스에서 명령을 실행해야 합니다. source
한 가지 방법이지만 더 쉬운 방법은 함수를 작성하는 것입니다.
function dummy(){
echo $?
}
user 또는 이와 동등한 항목으로 선언된 경우 .bashrc
예상대로 사용할 수 있고 작동해야 합니다.
(원하는 경우 값을 전달하여 원하는 다른 작업을 수행하도록 스크립트를 호출할 수도 있습니다 $?
.)