我创建了一个 shell 脚本,它将检查PATH
.如果没有,那么它将将该值添加到PATH
环境变量中。
根据echo $PATH
shell 脚本内的运行,已成功添加。但是当我尝试echo $PATH
在命令行中运行时..它没有反映所做的更改。
这是我的代码:
#!/bin/bash
postgresPath="/opt/PostgreSQL/9.2/bin"
echo "Checking PATH env.."
[[ ":$PATH:" != *"$postgresPath"* ]] && export PATH="${PATH}:$postgresPath"
echo $PATH
答案1
该脚本在其自己的环境中运行。它不会影响其父 shell(从中启动脚本)的环境,即$PATH
脚本中的更改不会$PATH
在交互式 shell 中发生更改。
一个小例子:
$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
$ ( PATH="hello"; echo "$PATH" )
hello
$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
export
(如果我在子 shell 中再次使用该变量并不重要,PATH
因为它已经导出)
.
我建议使用或获取脚本source
,这将在与当前 shell 相同的环境中执行其中的命令,或者将脚本转换为 shell 函数。
答案2
为了解决这个问题,我已将其添加到我的
~/.bash_aliases
下面的行经过测试,按预期工作。
function ep () { [ -n "$1" ] && DIR=$(readlink -fq $1) || DIR=$PWD; echo -e "exporting PATH (\e[33m$DIR\e[m)"; PATH=$DIR:$PATH; }
用法:
bashSHELL$ ep
or
bashSHELL$ ep /path/to/dir
or
bashSHELL$ ep ../path/to/dir
etc.