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