zsh の PS1 変数に対するコマンド置換は発生しません。

zsh の PS1 変数に対するコマンド置換は発生しません。

PS1プロンプトで動的に評価されたコマンド出力を取得するのが最も困難です。扱いにくいUbuntu 17.10で。以下は私が試したいくつかのことです(ディレクトリから始め、/abcヒントは太字で示されています)。

$PS1="$(pwd) > " エクスポート
/abc>CD /定義
/abc>パスワード
/def
/abc>PS1="\$(pwd) > " エクスポート
$(パスワード)>PS1エクスポート= '$(pwd)> '
$(パスワード)>PS1エクスポート='\$(pwd) > '
\$(パスワード) > 【怒った退場】

pwd最初の結果は最も近いですが、変数を定義するとコマンドが一度だけ評価されるように見えますPS1。明らかに私が理解していないものがあります。$(<cmd>)コマンドプロンプトが表示されるたびに再評価するにはどうすればよいですか?

答え1

zshシェルが値に対してコマンド置換を実行できるようにするには、シェルオプションをPS1設定します。PROMPT_SUBST

set -o PROMPT_SUBST
PS1='$(pwd) > '

exportこの変数は必須ではPS1ありません。

PROMPT_SUBSTシェルオプションがデフォルトで設定されていない理由は、zshシェルにすでに豊富なプロンプト拡張構文があるためです。

たとえば、あなたの例は次のように置き換えることができます。

PS1='%/ > '

詳細については、zshmiscシステムマニュアルの「プロンプトシーケンスの拡張」セクションを参照してください。


使用するとき

PS1="$(pwd) > "

PS1変数に割り当てられた値は、割り当て前に拡張されます。これがディレクトリを変更しても変更されない理由です。

関連情報