ファイルプロンプトで次のように入力した場合.zshrc
:
PROMPT="`pwd` >"
現在の作業ディレクトリを印刷したいです。ただし、pwd
常に印刷されます/Users/kevin
。現在の作業ディレクトリが表示されないのはなぜですか?
(この機能を設定する関数があることを知っています%~
。なぜこれがうまくいかないのか疑問に思います。これは私がやろうとしている高度な作業の簡単な場合です。)
答え1
PROMPT変数が設定されていると、「pwd」が評価されるからです。努力するecho $PROMPT
。
例えば
renan ~ % PROMPT="`pwd` >"
/home/renan >echo $PROMPT
/home/renan >
ご覧のとおり、 "pwd"はPROMPT =コマンドを実行したときにあったディレクトリに置き換えられます。
答え2
問題は、バックティックが魔法のような瞬間ごとに変わるのではなく、一度だけ変わるので、プロンプトがpwd
現在あるすべてに設定されるということです。コマンドを入力するたびに何かを再実行するには、リセットする必要があるものfunction precmd()
を使用してください$PROMPT
。たとえば、これは現在のディレクトリに基づいてプロンプトをリセットする非常に便利な機能です。
function windows() {
clear
echo -e "Microsoft Windows 2000 [Version 5.00.2195]\n(c) Microsoft Corporation, 1985-2000.\n"
function precmd() {
PWD=$(pwd)
PWD=${PWD/\/usr/\/Program Files}
PWD=${PWD/\/home\/$(whoami)/\/Documents and Settings\\Administrator}
PWD=${PWD/\/home/\/Documents and Settings}
PWD=${PWD/\/sbin/\/Windows}
export PS1="C:${PWD//\//\\}> "
}
}
...または%~
PS1で次のように使用してください。
PS1=' %n@%m: %~%# '
ここでは%n
、ユーザー、%m
ホスト、%~
現在のディレクトリ、%#
スーパーユーザーインジケータです。