linux添加路径到bashrc,关于linux:在bashrc中有没有合理的方法将新路径附加到PATH?...

我经常需要在.bashrc中为PATH环境变量添加新路径,如下所示:

export PATH = / usr / local / bin:$ PATH

然后为了让它生效,我总是'source~ / .bashrc'或'。 ?/ .bashrc',虽然我发现这样做的一个缺点让我感到不舒服。

如果我继续这样做,PATH会越来越长,有许多重复的条目,例如在上一个命令中,如果我两次输入它,PATH的值将是

PATH = / usr / local / bin:/ usr / local / bin:/ usr / local / bin:$ PATH(< - 原始路径)。

是否有更好的方法在bashrc中将新路径附加到PATH而不会让它变得难看?

属于superuser.com

@Paul:我倾向于同意(或服务器故障),但解决方案是程序化的。

另一种方法是检查是否未设置OPATH。如果是,请将其设置为PATH。这将是您原来的路径。

if ["$OPATH" =="" ];

then

OPATH=$PATH

fi

PATH=~/bin:$OPATH

(代码未经测试......)

我测试了代码,它工作正常,首先记录原始的东西很聪明,谢谢。

我的方法就像rcollyer一样,但更通用,处理优先级并使用更多代码。

function append () {

local val

eval val=\$$1

if [[ x$val = x ]] ; then

eval $1=$2

else

eval $1="$val:$2"

fi

}

function is_in() {

local pattern

pattern=":$1\$|^$1:|:$1:"

echo $2 | egrep -q"$pattern" &&  return 0

return 1

}

function append_if_absent() {

local val

eval val=\$$1

if ! is_in"$2""$val" ; then

append"$1""$2"

fi

}

export ROOTSYS=/usr/local/root

append_if_absent LD_LIBRARY_PATH $ROOTSYS/lib/root

append_if_absent PATH $ROOTSYS/bin

如果您愿意接受shell的更改,zsh具有declare -U用于此目的:它将自动从数组中删除重复项,同时保持优先级。它还允许您使用$path而不是$path。

% PATH=a:b:c:d:c:b:a

% echo $PATH

a:b:c:d:c:b:a

% declare -U PATH

% echo $PATH

或者,为了提高可读性,您可以使用自动保持同步的数组表单:

% path=(a b c d c b a)

% print $path

a b c d c b a

% print $PATH

a:b:c:d:c:b:a

% declare -U path

% print $path

a b c d

% print $PATH

a:b:c:d

从我的.bashrc:

pathadd() {

if [ -d"$1" ] && [[":$PATH:" != *":$1:"* ]]; then

PATH="$PATH:$1"

fi

}

pathadd /usr/local/bin

pathadd ~/bin

...etc

请注意,这会将目录添加到路径的末尾;做出明显的改变,将它们添加到开头。

这是我长期以来一直使用的:我向.bash_profile或.bashrc添加了一个名为addpath()的函数,然后我可以在路径中添加一个目录,知道不会有重复。例如:

addpath ~/bin

addpath ~/myproj/bin

这是addpath()的源代码:

function addpath()

{

if [ $# -eq 0 ]

then

echo"  Usage: addpath dir ..."

return 1

fi

local p

local dir

local IFS=:

local found

for dir; do

found=0

for p in $PATH; do

if ["$p" ="$dir" ]; then

found=1

fi

done

if ["_$found" ="_0" ]; then

PATH=$PATH:$dir

fi

done

}

我的解决方案是一个班轮:

export PATH=`echo ::${PATH} | sed -e 's/\:/

/g' | sort | uniq \

| awk 'BEGIN {ORS=":"} {print $0}'`

其中sed用换行符替换:,sort和uniq去除任何重复项,awk重建路径。这样做的缺点是订单不能维护,因此如果您希望某个位置的程序优先于其他位置的程序,则会导致问题。我没有实现它,但我想你可以使用perl按顺序维护这些,同时剥离重复项。

聪明,但绝对优先。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值