명령을 실행한 후 Zsh는 precmd를 실행합니다.

명령을 실행한 후 Zsh는 precmd를 실행합니다.

어떤 이유로 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$ 

debugbeforecmdDEBUG 트랩이 명령 이전(기본값) 또는 이후에 실행되는지 여부를 결정하는 옵션 도 참조하세요 .

precmd/ 함수를 설정하는 대신 자신만의 함수를 정의하고 해당 / 배열에 추가할 수도 있습니다(트랩에는 해당 항목이 없음) .preexecprecmd_functionspreexec_functions

myhook() echo myhook
precmd_functions+=(myhook)

당신은 또한 볼 수 있습니다zsh-add-hook


1 이름은 초기 변경 로그를 기반으로 1983년경 Karl Kleinpaste가 추가한 유사한 기능을 가진 이름 precmd에서 파생되었습니다 . tcshzsh의 원래 1.0 버전은 precmd1990년 초에 출시되었습니다.

² 개발 초기에 추가되었습니다 bash. 1989 1.02에는 이미 존재했습니다.

³ 1980년대의 콘 쉘. 또한 1990년 zsh의 첫 번째 버전에서도 마찬가지입니다.

관련 정보