어떤 명령이 실행되고 있는지 감지하고 현재 명령 다음에 추가 명령을 실행하는 방법

어떤 명령이 실행되고 있는지 감지하고 현재 명령 다음에 추가 명령을 실행하는 방법

나는 특정 명령을 실행했다는 것을 쉘이 감지하고 그 명령을 실행한 후에 다른 명령을 실행하기를 원합니다.

예: 매번 명령을 실행할 때:git commit -m " "

먼저 위 명령을 완료한 후 다음과 같은 다른 명령을 실행하세요.python check.py

파일 을 수정하는 것을 선호합니다 .bash_rc. 내가 맞나요?

미리 감사드립니다.

답변1

trapBash에서 이 명령을 사용하세요.

트랩 [-lp] [[arg] sigspec ...]

sigspec이 DEBUG인 경우 arg 명령은 모든 단순 명령 전에 실행됩니다.

이제 유일한 문제는 트랩 명령이 이 명령 이후가 아닌 이전에 실행된다는 것입니다. 그러나 이를 사용하여 실행할 명령을 참조할 수 $BASH_COMMAND있으며 해당 명령이 실행되는 것을 방지할 수 있습니다.

외부 디버깅

  1. DEBUG 트랩에 의해 실행된 명령이 0이 아닌 값을 반환하면 다음 명령을 건너뛰고 실행되지 않습니다.

따라서 DEBUG 트랩을 설정하고 관심 있는 명령이 감지되면 이를 실행하여 $BASH_COMMAND자신의 명령을 실행하고 원래 명령이 실행되지 않도록 합니다.

편집하다

다음 예를 시도해 보세요.

#!/bin/bash                                                                                                                                                                                                                                                                     

function myfunc ()
{
    if test "$BASH_COMMAND" = "echo 1"; then
        $BASH_COMMAND
        echo "runing after 'echo 1'"
        return 1
    else
        return 0
    fi
}

shopt -s extdebug
trap "myfunc" DEBUG

echo 1
echo 2

다음 스크립트를 실행하세요.

$ bash test.sh
1
runing after 'echo 1'
2

관련 정보