echo $PATH 不反映我在 shell 脚本中所做的“导出路径”

echo $PATH 不反映我在 shell 脚本中所做的“导出路径”

我创建了一个 shell 脚本,它将检查PATH.如果没有,那么它将将该值添加到PATH环境变量中。

根据echo $PATHshell 脚本内的运行,已成功添加。但是当我尝试echo $PATH在命令行中运行时..它没有反映所做的更改。

这是我的代码:

#!/bin/bash
postgresPath="/opt/PostgreSQL/9.2/bin"
echo "Checking PATH env.."
[[ ":$PATH:" != *"$postgresPath"* ]] && export PATH="${PATH}:$postgresPath"
echo $PATH

http://rextester.com/RBLTT17164

答案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.

相关内容