간단한 명령줄이 있습니다.
uptime | awk '{print $(NF - 2)}'
Bash 쉘에서는 잘 작동하지만 zsh에서 실행하면 다음 오류가 발생합니다.
title:5: command not found: NF
평소와 같이 이것은 파일럿 버그가 될 것입니다(zsh에서 확장이 어떻게 작동하는지 이해하지 못합니다). 그러나 zsh에서 동일한 명령이 작동하도록 하려면 어떻게 해야 할지 모르겠습니다.
[편집하다]
OSX의 zsh 버전은 4.3.11이고 출력은 다음과 같습니다 set -xv; uptime | awk '{print $(NF - 2)}'
.
$ set -xv; uptime | awk '{print $(NF - 2)}'
title:5: command not found: NF
+zsh:3> uptime
+zsh:3> awk '{print $(NF - 2)}'
0.51
+precmd:1> title '%15<..<%~%<<' '%n@%m: %~'
+title:1> [ '' '!=' true ']'
+title:2> [[ xterm-256color == screen* ]]
+title:4> [[ xterm-256color == xterm* ]]
+title:5> print -Pn '\e]2;%n@%m:\ %~\a'
+title:6> print -Pn '\e]1;%15\<..\<%~%\<\<\a'
+zsh:4> git_prompt_info
+git_prompt_info:1> ref=+git_prompt_info:1> ref=''
+git_prompt_info:1> return
+zsh:4> vi_mode_prompt_info
+vi_mode_prompt_info:1> echo ''
분명히 awk 명령은 작동하지만 터미널 사용자 정의가 실패합니다.
답변1
title:5: command not found: NF
title
이 오류 메시지는 터미널 제목을 실행 중인 명령으로 설정할 수 있는 함수의 오류를 보여줍니다 . 후속 기록에는 title
다음이 호출되었음을 보여줍니다.precmd
, 명령이 완료되고 다음 프롬프트가 표시되기 전에 호출됩니다. 그러나 오류는 실제로 다음으로 인해 발생합니다.preexec
, 명령을 실행하기 전에 호출됩니다. 함수는 귀하 ~/.zshrc
(또는 /etc/zshrc
둘 중 하나가 호출하는 파일)에 정의되어 있습니다.
코드를 보지 않고는 정확히 무엇이 잘못되었는지 알 수 없지만 명령 문자열이 어떤 방식으로 확장되는 것처럼 보입니다. prompt_subst
옵션을 설정하고 인쇄 명령을 전달했을 수도 있습니다 print -P
. 명령을 탈출해야 합니다. 특히, print -P
인쇄해서 인쇄 하지 마시고 print -r
, 텍스트 제어 문자에 주의하시기 바랍니다. 그것은 다음과 같습니다:
print -r ${${${${(qqqq)1}#\$\'}%\'}//\\\'/'}