这是我的文件的一部分.bashrc
:
echo_pwd () {
echo `pwd`
}
export echo_pwd="`echo_pwd`/"
我创建了一个新函数echo_pwd
,用于打印当前目录的路径和一个新环境变量,其中包含当前目录,后跟斜杠。因此,我可以在命令行中使用我的环境变量(例如$PWD
)。
但是,此环境变量无法正确扩展,并且始终引用我的主目录:
~/Documents$ env | grep echo_pwd
echo_pwd=/home/pierre/
~/Documents$
我该怎么做才能使我的环境变量正确扩展?
注意:这显然是一个虚拟示例。在我的具体用例中,这echo_pwd
是一个更加复杂的函数。
答案1
您可能只执行该函数并设置变量的值一次。
要在使用时自动更新变量的值cd
,您可以覆盖 shell 的内置函数,cd
如下所示:
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
cd
这将使用您为函数提供的任何参数调用内置函数cd
,然后更新变量的值(请注意,export
如果您已经将其导出到其他地方,或者根本需要导出,则不需要)。
完整的设置可能看起来像
echo_pwd () {
printf '%s\n' "$PWD" # or just: pwd
}
export echo_pwd="$( echo_pwd )/"
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
我选择了使用printf
而$PWD
不是调用该pwd
实用程序,我也是用于$(...)
命令替换。
答案2
在 中export echo_pwd="`echo_pwd`/"
,命令替换仅在设置变量时执行一次。
如果需要更新变量的值,则需要再次设置它。
在交互式 bash 中,您可以使用PROMPT_COMMAND
,每次打印提示时都会执行:
$ PROMPT_COMMAND='echo_pwd="`echo_pwd`/"'
$ cd bar/
$ echo $echo_pwd/
/tmp/foo/bar//
$ cd baz
$ echo $echo_pwd
/tmp/foo/bar/baz/