PS1中的PWD错误

时间:2019-05-11 01:27:02

标签: bash macos

此问题特定于MAC OS。

这是bash配置文件中的代码。只需在提示中更新当前目录路径

function __get_current_dir() {
    pwd
}
export PS1="\u@\h:--$(__get_current_dir)--\W$ "

下面是观察到的行为。

dummy@mac:--/Users/dummy--~$ pwd
/Users/dummy
dummy@mac:--/Users/dummy--~$ cd Desktop/
dummy@mac:--/Users/dummy--Desktop$ pwd
/Users/dummy/Desktop
dummy@mac:--/Users/dummy--Desktop$ cd ../Documents/
dummy@mac:--/Users/dummy--Documents$ pwd
/Users/dummy/Documents
dummy@mac:--/Users/dummy--Documents$ 

在终端中执行pwd时看到的输出显示了正确的路径,但是在pwd中求值的__get_current_dir与第一次打开终端时加载的路径卡在一起。相同的代码在ubuntu系统中正常工作。

对此有任何解决方法吗?函数__get_current_dir中包含更多代码,其逻辑特定于当前目录。由于pwd在这里不起作用,因此该函数的结果是错误的。

1 个答案:

答案 0 :(得分:3)

定义__get_current_dir 时,正在评估

PS1。这意味着它是静态的。如果您运行echo "$PS1",则会看到\u@\h:--/Users/dummy--\W$

要解决此问题,请使用单引号或使用反斜杠将美元符号转义:

PS1='\u@\h:--$(__get_current_dir)--\W$ '
PS1="\u@\h:--\$(__get_current_dir)--\W$ "

顺便说一句,there's no reason to export PS1

还有BTW this is not specific to Mac OS, or even to variables