실행 전에 각 명령을 캡처하고 장식합니다.

실행 전에 각 명령을 캡처하고 장식합니다.

명령줄에 입력하는 모든 명령을 가로채야 합니다.장식하다그들을.

echo Hi예를 들어, 내가 실제로 실행하고 싶은 것을 입력할 때마다 /bin/wrapper "echo Hi".

다시 컴파일하는 것 외에 bash에서 이를 달성할 수 있는 방법이 있습니까?

편집: 또한, for _ in 1 2; do ping -c1 google.com; done있어야 합니다/bin/wrapper "for _ in 1 2; do ping -c1 google.com; done"

답변1

당신은 이것을 할 수 있습니다bash 사전 실행.

스크립트 다운로드:

wget 'https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh'

스크립트 소스:

source 'bash-preexec.sh'

이제 그 내용에 따르면사용 지침:

두 가지 기능사전 실행그리고사전 명령이제 정의할 수 있으며 존재하는 경우 bash-preexec에 의해 자동으로 호출됩니다.

preexec명령을 읽고 실행 직전에 즉시 실행합니다. 사용자가 입력한 문자열이 첫 번째 매개변수로 전달됩니다.

precmd각 프롬프트 전에 실행하십시오. PROMPT_COMMAND와 동일하지만 더 유연하고 유연합니다.

다음과 같이 사용할 수 있습니다.

preexec() { echo "just typed $1"; }

precmd() { echo "printing the prompt"; }

DEBUGbash-preexec는 트랩 과 환경 변수를 사용하여 PROMPT_COMMAND구현된 쉘 스크립트 일 뿐이라는 점도 언급할 가치가 있습니다 .

트랩 에 대한 자세한 내용은 DEBUG명령의 참조 문서를 참조하세요 trap.

환경 변수 에 대한 자세한 내용은 PROMPT_COMMANDBash 매뉴얼을 참조하세요.

답변2

이것은 달성 가능하다지쉬. Zsh는 Bash의 거의 상위 집합인 언어를 사용하고 고도로 사용자 정의 가능한 UI를 갖도록 설계된 널리 사용되는 셸입니다.

Zsh에서는 Enter 키를 눌렀을 때 실행될 임의의 기능을 정의할 수 있습니다. 이는 행의 내용에 대해 임의의 작업을 수행할 수 있습니다. ( accept-line위젯 참조) 따라서 한 가지 해결책은 대신 Zsh를 사용하는 것입니다.

관련 정보