我想在 sh 提示符(而不是 bash shell)中显示当前路径,它目前只显示“#”,我尝试引入这个
env PS1="$(whoami)@$(hostname):$(pwd)"
和
set PS1="$(whoami)@$(hostname):$(pwd)"
在/etc/profile
。
但很明显,当目录更改或用户更改时,这不会刷新。请提出一种使其动态化的方法。
答案1
双引号中的命令替换"
会立即展开。这不是您想要的提示。单引号'
将保留替换,$PS1
然后仅在显示提示时展开。因此这应该有效:
PS1='$(whoami)@$(hostname):$(pwd)'
如果您希望在提示符末尾使用通常的美元符号和空格,只需$
在末尾添加(无需转义):PS1='$(whoami)@$(hostname):$(pwd)$ '
答案2
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
答案3
此命令对我有用。
export PS1="\u@\h: \W:$"
在哪里
\u = 用户名
\h = 主机名
\W 当前文件夹的名称(非完整路径)
答案4
一个答案是使用单引号而不是双引号,但这并不是完全正确的答案。您真正想要做的是推迟对提示内的代码的评估,直到使用提示为止。
set PS1="$(pwd)"
将提示设置为 set 命令的工作目录。
set PS1="\$(pwd)"
不会扩展 $(pwd)。相反,PS1 被设置为 $(pwd) 的文字值。
通过运行来测试/理解这一点:
echo $PS1
。如果您看到字符串:$pwd,则提示有效。如果您看到文字路径,则提示已损坏,因为它已被静态设置