我使用一组便利函数在变量之前或之后添加路径。这些功能位于Bash的分发压缩包中,位于一个名为“ pathfuncs”的contrib文件中。
- add_path会将条目添加到PATH变量的末尾
- pre_path会将条目添加到PATH变量的开头
- 无论在何处,del_path都会从PATH变量中删除该条目
如果将变量指定为第二个参数,它将使用该变量而不是PATH。
为了方便起见,它们是:
# is $1 missing from $2 (or PATH) ?
no_path() {
eval "case :\$${2-PATH}: in *:$1:*) return 1;; *) return 0;; esac"
}
# if $1 exists and is not in path, append it
add_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
}
# if $1 exists and is not in path, prepend it
pre_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
}
# if $1 is in path, remove it
del_path () {
no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
}
如果将它们添加到bash启动文件中,则可以将其添加到PATH中,如下所示:
pre_path $HOME/bin
add_path /sbin
add_path /usr/sbin
或指定其他变量:
pre_path $HOME/man MANPATH
pre_path $HOME/share/man MANPATH
add_path /usr/local/man MANPATH
add_path /usr/share/man MANPATH
我在rc文件中使用此方法,将pre_paths首先放置,将add_paths其次放置。一目了然,这使我所有的路径变化都易于理解。另一个好处是,行足够短,可以在必要时在行上添加尾随注释。
而且由于这些功能,您可以从命令行以交互方式使用它们,例如说add_path $(pwd)
将当前目录添加到路径。
PATH=foo:$PATH
,因为它每次都保持增长似乎是错误的source ~/.bashrc
,甚至exec bash
不能帮助,因为$PATH
是export
。