如何使 Bash/Zsh 提示仅显示当前目录及其父目录?

bla*_*low 7 bash prompt zsh

如何创建仅显示当前目录及其父目录的 bash 和 zsh 提示?

例如,如果我在 dir ~/pictures/photos/2021,它应该显示:

[photos/2021]$ echo hi
Run Code Online (Sandbox Code Playgroud)

就这样。想要它为bash和为zsh

Sté*_*las 12

zsh

PS1='[%2d] $ '
Run Code Online (Sandbox Code Playgroud)

详情请参阅info zsh 'prompt expansion'

bash(或者zsh -o promptsubst,虽然你不想在那里这样做,好像$PWD包含%字符,这会导致进一步的提示扩展):

PS1='[${PWD#"${PWD%/*/*}/"}] $ '
Run Code Online (Sandbox Code Playgroud)

  • @αғsнιη,它和你的“$PS1”一样安全。如果你设置了`PS1='$(reboot)'`,那么它当然会重启。这就是为什么你不想将 `$PS1` 设置为任意值而不将它们作为 `bash` 中的 `PROMPT_COMMAND` 的一部分进行清理。在`zsh` 中,如果你启用`promptsubst` 选项,情况会更糟,因为`%x` 扩展是在这些扩展之后*完成的。在那里使用 `$psvar` 数组和 `precmd()` 比启用 `prompsubst` 更安全。 (3认同)
  • @αғsнιη, `PS1='$PWD'` 在这种情况下是安全的,因为扩展不会递归完成。`$PWD` 将扩展为其值,但如果该值有一些 `$` 或反引号,则不会进一步扩展。提示是如果你的 `$PROMPT_COMMAND` 做了类似 `PS1="$PWD ... "` 的事情(注意双引号) (2认同)