나는 특정 명령을 실행했다는 것을 쉘이 감지하고 그 명령을 실행한 후에 다른 명령을 실행하기를 원합니다.
예: 매번 명령을 실행할 때:git commit -m " "
먼저 위 명령을 완료한 후 다음과 같은 다른 명령을 실행하세요.python check.py
파일 을 수정하는 것을 선호합니다 .bash_rc
. 내가 맞나요?
미리 감사드립니다.
답변1
trap
Bash에서 이 명령을 사용하세요.
트랩 [-lp] [[arg] sigspec ...]
sigspec이 DEBUG인 경우 arg 명령은 모든 단순 명령 전에 실행됩니다.
이제 유일한 문제는 트랩 명령이 이 명령 이후가 아닌 이전에 실행된다는 것입니다. 그러나 이를 사용하여 실행할 명령을 참조할 수 $BASH_COMMAND
있으며 해당 명령이 실행되는 것을 방지할 수 있습니다.
외부 디버깅
- 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