함수를 작성하다

함수를 작성하다

누군가 존재하지 않는 명령을 호출한다고 가정해 보겠습니다. 이후에 실행하는 스크립트에서 해당 오류 상태를 검색하는 유일한 방법은 다음을 사용하는 것입니다.source

즉, 스크립트의 이름이 dummy해당 콘텐츠의 위치에 있다고 가정합니다.

#!/bin/bash

echo $?

전화하면 내가 찾고 있는 (127) 종료 상태만 얻을 수 있다는 것을 알고 있지만 , 이를 사용하지 않고 스크립트 내부의 마지막 명령에서 종료 상태를 얻는 source dummy데 도움이 될 수 있는 다른 방법이 있습니까? 내가 원하는 동작을 얻기 위해 간단히 전화를 걸 수 있습니까 ?aliassourcedummy

이전 명령의 오타를 확인하는 스크립트를 작성하고 싶습니다. 이를 위해서는 처음에 잠재적인 오타가 있는지 확인하기 위해 이전 종료 상태를 감지해야 하므로 스크립트에서 마지막 명령의 종료 상태를 가져올 수 있어야 합니다. 또한 사용자가 수행해야 하는 설정의 양을 최소화하여 사용자가 간단히 전화만 걸면 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예상대로 사용할 수 있고 작동해야 합니다.

(원하는 경우 값을 전달하여 원하는 다른 작업을 수행하도록 스크립트를 호출할 수도 있습니다 $?.)

관련 정보