명령줄에 입력하는 모든 명령을 가로채야 합니다.장식하다그들을.
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"; }
DEBUG
bash-preexec는 트랩 과 환경 변수를 사용하여 PROMPT_COMMAND
구현된 쉘 스크립트 일 뿐이라는 점도 언급할 가치가 있습니다 .
트랩 에 대한 자세한 내용은 DEBUG
명령의 참조 문서를 참조하세요 trap
.
환경 변수 에 대한 자세한 내용은 PROMPT_COMMAND
Bash 매뉴얼을 참조하세요.
답변2
이것은 달성 가능하다지쉬. Zsh는 Bash의 거의 상위 집합인 언어를 사용하고 고도로 사용자 정의 가능한 UI를 갖도록 설계된 널리 사용되는 셸입니다.
Zsh에서는 Enter 키를 눌렀을 때 실행될 임의의 기능을 정의할 수 있습니다. 이는 행의 내용에 대해 임의의 작업을 수행할 수 있습니다. ( accept-line
위젯 참조) 따라서 한 가지 해결책은 대신 Zsh를 사용하는 것입니다.