zsh 提示符中的密码设置不正确

zsh 提示符中的密码设置不正确

如果我在文件的提示中输入以下内容.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()which 应重置您的$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是主机,%~是当前目录,%#是超级用户指示符。

相关内容