簡単なコマンドラインがあります。
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}#\$\'}%\'}//\\\'/'}