如何在 linux 的 sh(不是 bash)的命令提示符中显示当前路径?

Ble*_*mer 55 linux shell sh busybox

我想在 sh 提示符(不是 bash shell)中显示当前路径,当前只显示“#”,我尝试引入这个

env PS1="$(whoami)@$(hostname):$(pwd)"
Run Code Online (Sandbox Code Playgroud)

set PS1="$(whoami)@$(hostname):$(pwd)"
Run Code Online (Sandbox Code Playgroud)

/etc/profile

但很明显,当目录更改或用户更改时,这不会刷新。请提出一种使这种动态的方法。

mpy*_*mpy 87

双引号中的命令替换"会立即扩展。这不是您想要的提示。单引号'将保留替换$PS1,然后仅在显示提示时扩展。因此这应该有效:

export PS1='$(whoami)@$(hostname):$(pwd)'
Run Code Online (Sandbox Code Playgroud)

如果您想要通常的美元符号和提示末尾的空格,只需$在末尾添加(无需转义):export PS1='$(whoami)@$(hostname):$(pwd)$ '

  • 你把这一行放到`/etc/profile`(见问题)或`~/.profile`?! (3认同)
  • 有没有办法让它永久化?目前我每次登录都必须这样做。谢谢! (2认同)

小智 15

sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
Run Code Online (Sandbox Code Playgroud)

  • 恐怕这适用于 bash shell,不适用于 sh,当我这样做时,我得到 `\u@\h:\w>` 作为我的命令提示符 (2认同)

小智 7

这个命令对我有用。

export PS1="\u@\h: \W:$"
Run Code Online (Sandbox Code Playgroud)

其中
\u = 用户名
\h = 主机名
\W 当前文件夹的名称(非完整路径)


Arv*_*vid 5

人们可能会考虑通过添加一些颜色来对提示进行拉皮条。例如:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
Run Code Online (Sandbox Code Playgroud)

  • 这就是我一直在寻找的。我希望每个人都喜欢生活中的一些色彩:) (2认同)