Ton*_*ony 3 prompt zsh quoting command
我在尝试PS1使用Ubuntu 17.10上的zsh在我的提示中获得动态评估的命令输出时遇到了最困难的时刻。以下是我所做的一些尝试(我从 directory 开始,/abc提示为粗体):
$ export PS1="$(pwd) > " /abc > cd /def /abc > pwd /定义 /abc > export PS1="\$(pwd) > " $(pwd) > export PS1='$(pwd) > ' $(pwd) > export PS1='\$(pwd) > ' \$(pwd) > [愤怒退出]
第一个结果是最接近的,但看起来pwd在我定义PS1变量时命令只被评估一次。显然有一些我不明白的东西。$(<cmd>)每次显示命令提示符时,我该怎么做才能重新评估?
要让zshshell 对 的值执行命令替换PS1,请设置PROMPT_SUBSTshell 选项:
set -o PROMPT_SUBST
PS1='$(pwd) > '
Run Code Online (Sandbox Code Playgroud)
请注意,有没有必要export的PS1变量。
PROMPT_SUBST默认情况下不设置 shell 选项的原因可能是zshshell 已经具有丰富的提示扩展语法。
例如,您的示例可以替换为
PS1='%/ > '
Run Code Online (Sandbox Code Playgroud)
有关这方面的更多信息,请参阅zshmisc系统手册中的“扩展提示序列”部分。
当你使用
PS1="$(pwd) > "
Run Code Online (Sandbox Code Playgroud)
在PS1赋值之前扩展给变量的值。这就是为什么当您更改目录时它不会更改的原因。