Bash 在$PATH前面加前缀
为了避免使用通常的盲目追加技术对路径进行临时设置,我开始编写一些代码,将项目预先添加到路径中(例如asdf路径) 它是这样调用的:Bash 在$PATH前面加前缀,bash,function,path,prepend,Bash,Function,Path,Prepend,为了避免使用通常的盲目追加技术对路径进行临时设置,我开始编写一些代码,将项目预先添加到路径中(例如asdf路径) 它是这样调用的:pathprepend/usr/local/bin和/usr/local/bin被预先添加到PATH。脚本还应该干净地将/usr/local/bin从路径中的原始位置删除(确实如此,但不干净)(dodgy regex) 有人能推荐一种更干净的方法吗?shell(bash)regex支持有点有限。我更愿意拆分成一个数组并删除冗余元素,但不知道这个数组或我的实现的可移植性
pathprepend/usr/local/bin
和/usr/local/bin
被预先添加到PATH。脚本还应该干净地将/usr/local/bin
从路径中的原始位置删除(确实如此,但不干净)(dodgy regex)
有人能推荐一种更干净的方法吗?shell(bash)regex支持有点有限。我更愿意拆分成一个数组并删除冗余元素,但不知道这个数组或我的实现的可移植性如何。我的感觉是,不是特别好 如果要将
PATH
拆分为一个数组,可以这样做:
IFS=: eval 'arr=($PATH)'
这将创建一个数组,arr
,其元素是路径
字符串中以冒号分隔的元素
然而,在我看来,这并不一定会让你更容易做你想做的事情。下面是我如何准备
路径
:
for ARG in "$@"
do
while [[ $PATH =~ :$ARG: ]]
do
PATH=${PATH//:$ARG:/:}
done
PATH=${PATH#$ARG:}
PATH=${PATH%:$ARG}
export PATH=${ARG}:${PATH}
done
这使用bash替换从
PATH
的中间删除ARG
,从PATH
的开头删除ARG
,从PATH
的末尾删除ARG
,最后在ARG
之前添加到PATH
。这种方法的好处是,如果ARG
的实例多次出现,可以从PATH
中删除它的所有实例,确保只有一个实例在函数执行后才出现在开头。如果要将PATH
拆分为一个数组,可以这样做:
IFS=: eval 'arr=($PATH)'
这将创建一个数组,arr
,其元素是路径
字符串中以冒号分隔的元素
然而,在我看来,这并不一定会让你更容易做你想做的事情。下面是我如何准备
路径
:
for ARG in "$@"
do
while [[ $PATH =~ :$ARG: ]]
do
PATH=${PATH//:$ARG:/:}
done
PATH=${PATH#$ARG:}
PATH=${PATH%:$ARG}
export PATH=${ARG}:${PATH}
done
这使用bash替换从
PATH
的中间删除ARG
,从PATH
的开头删除ARG
,从PATH
的末尾删除ARG
,最后在ARG
之前添加到PATH
。这种方法的好处是,如果ARG
的实例多次出现,可以将其从PATH
中删除,确保唯一的实例将在函数执行后的开始处。我甚至没有意识到,但我的代码在bash中被破坏了-谢谢,我甚至没有意识到,但我的代码在bash中被破坏了-谢谢