此问题特定于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
在这里不起作用,因此该函数的结果是错误的。
答案 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$ "