bash 명령 이벤트(또는 셸)

bash 명령 이벤트(또는 셸)

bash더 나은 방법 으로 실행된 모든 명령을 캡처하는 방법이 있습니까 sh?

명령이 실행될 때마다 호출되는 래퍼 스크립트가 필요합니다. 입력할 때와 마찬가지로 cd /home/래퍼 스크립트가 호출되기를 원합니다 . command_wrapper.sh내부에서 명령을 취소하거나 다른 명령을 호출하고 싶습니다.

#!/bin/sh
#command_wrapper.sh

echo "you tried to call the command [$@]"

명령이 존재하지 않을 때만 스크립트를 호출해도 괜찮습니다. 가능합니까?

답변1

DEBUG이를 위해 트랩을 사용할 수 있습니다 . 이 트랩에는 $BASH_COMMAND마지막으로 실행된 명령이 포함되어 있습니다.

trap 'echo "you tried to call the command [$BASH_COMMAND]"' DEBUG

프롬프트나 에서 명령을 실행하면 $PROMPT_COMMAND해당 명령에서도 트랩이 실행됩니다. 이러한 상황을 피하기 $BASH_COMMAND위해 동일한 지 확인하기 위해 검사를 추가할 수 있습니다 .$PROMPT_COMMAND

명령이 존재하지 않을 때 실행하는 경우, bash에서는 command_not_found_handle이름이 지정된 함수가 존재하면 명령이 발견되지 않는 한 실행됩니다. 실행하려는 명령줄에 인수로 전달된 모든 인수를 사용하여 실행되므로 다음을 수행할 수 있습니다.

command_not_found_handle() {
    echo "you tried to call the command [$@]"
}

그 결과는 다음과 같습니다.

$ foo bar
you tried to call the command [foo bar]
$

관련 정보