어떤 이유로 zsh가 precmd
실행됩니다.뒤쪽에그보다 먼저 주문을...?
[user@main ~/workspace]$ cat ~/workspace/precmd.sh
echo "Command should start after this line, but it will not"
[user@main ~/workspace]$ precmd () { ~/workspace/precmd.sh }
[user@main ~/workspace]$ command -v vim
/usr/bin/vim
Command should start after this line, but it will not
내 zshrc에서 사용해 보았지만 trap '/home/user/workspace/precmd.sh' DEBUG
그것도 작동하지 않습니다.
답변1
함수 이름이 약간 오해의 소지가 있을 수 있더라도 이것이 의미하는 바입니다.
precmd
각 프롬프트 전에 실행하십시오. 유사²bash
$PROMPT_COMMAND
에서 info zsh precmd
:
precmd
각 프롬프트 전에 실행하십시오. 예를 들어 기존 작업에 대한 알림이 표시될 때 발생하는 명령줄이 다시 그려진다고 해서 사전 명령 기능이 다시 실행되지는 않습니다.
DEBUG
각 명령 전에 어떤 일이 발생하는지 트랩3을 참조하세요 .
프롬프트에 입력한 코드( 를 누른 후 Enter)가 해석되기 전에 수행되는 작업에 대해서는 preexec
후크 기능을 참조하세요.
prompt$ precmd() echo precmd; preexec() print -r preexec $1; TRAPDEBUG() print -r debug $ZSH_DEBUG_CMD
debug echo precmd
precmd
prompt$ echo 1; echo 2; echo 3
debug print -r preexec $1
preexec echo 1; echo 2; echo 3
debug echo 1
1
debug echo 2
2
debug echo 3
3
debug echo precmd
precmd
prompt$
debugbeforecmd
DEBUG 트랩이 명령 이전(기본값) 또는 이후에 실행되는지 여부를 결정하는 옵션 도 참조하세요 .
precmd
/ 함수를 설정하는 대신 자신만의 함수를 정의하고 해당 / 배열에 추가할 수도 있습니다(트랩에는 해당 항목이 없음) .preexec
precmd_functions
preexec_functions
myhook() echo myhook
precmd_functions+=(myhook)
당신은 또한 볼 수 있습니다zsh-add-hook
1 이름은 초기 변경 로그를 기반으로 1983년경 Karl Kleinpaste가 추가한 유사한 기능을 가진 이름 precmd
에서 파생되었습니다 . tcsh
zsh의 원래 1.0 버전은 precmd
1990년 초에 출시되었습니다.
² 개발 초기에 추가되었습니다 bash
. 1989 1.02에는 이미 존재했습니다.
³ 1980년대의 콘 쉘. 또한 1990년 zsh의 첫 번째 버전에서도 마찬가지입니다.