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