Bash 在$PATH前面加前缀

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支持有点有限。我更愿意拆分成一个数组并删除冗余元素,但不知道这个数组或我的实现的可移植性

为了避免使用通常的盲目追加技术对路径进行临时设置,我开始编写一些代码,将项目预先添加到路径中(例如asdf路径)

它是这样调用的:
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中被破坏了-谢谢