相关疑难解决方法(0)

从Bash中的$ PATH变量中删除路径的最优雅方法是什么?

或者更一般地说,如何从Bash环境变量中以冒号分隔的列表中删除项?

我想我多年前已经看到了一种简单的方法,使用更高级的Bash变量扩展形式,但如果是这样的话,我已经忘记了它.对谷歌的快速搜索出乎意料地少了几个相关结果,没有一个我称之为"简单"或"优雅".例如,分别使用sed和awk的两种方法:

PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH)
Run Code Online (Sandbox Code Playgroud)

什么都不直接存在?有什么类似于Bash中的split()函数吗?

更新:
看起来我需要为我的故意模糊的问题道歉; 我对解决特定用例的兴趣不如激发良好的讨论.幸运的是,我明白了!

这里有一些非常聪明的技巧.最后,我在工具箱中添加了以下三个功能.魔法发生在path_remove中,这主要基于Martin York巧妙使用awk的RS变量.

path_append ()  { path_remove $1; export PATH="$PATH:$1"; }
path_prepend () { path_remove $1; export PATH="$1:$PATH"; }
path_remove ()  { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
Run Code Online (Sandbox Code Playgroud)

唯一真正的缺点是使用sed去除尾部结肠.考虑到马丁的其他解决方案是多么简单,但我非常愿意接受它!


相关问题: 如何在shell脚本中操作$ PATH元素?

bash shell path variable-expansion list-processing

106
推荐指数
10
解决办法
6万
查看次数

有用的BASH代码片段

我们已经有很多其他语言了.用于C/C++的那个很受欢迎,因此与Python相当.我认为BASH的一个也很有意思.

linux bash

15
推荐指数
6
解决办法
1万
查看次数

如何避免在csh中复制路径变量

通常在cshrc文件中有类似的东西来设置路径:

set path = ( . $otherpath $path )
Run Code Online (Sandbox Code Playgroud)

但是,当您多次获取cshrc文件时,路径会重复,您如何防止重复?

编辑:这是一种不干净的方式:

set localpaths = ( . $otherpaths )
echo ${path} | egrep -i "$localpaths" >& /dev/null
if ($status != 0) then
    set path = ( . $otherpaths $path )
endif
Run Code Online (Sandbox Code Playgroud)

csh path-variables path environment-variables

9
推荐指数
2
解决办法
8506
查看次数

当我执行 bash 时,$PATH 不断重复

我在 /etc/bashrc(在 Fedora 上)中添加了如下条目。

#=========== Maven Related variables
export JAVA_HOME='/usr/java/default'
export PATH=${JAVA_HOME}:$PATH


#=========== Maven Related variables
export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.4
export PATH=${M2_HOME}/bin:$PATH

#=========== Ant Related variables
export ANT_HOME=/usr/local/apache-ant
export Path=${ANT_HOME}/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

现在,每次我执行 bash 命令刷新环境变量时,所有这些添加都会重复,并且 PATH 只是不断递归地添加自身;如果我继续执行 bash 几十次,那么 $PATH 就会变成一百行重复内容。我究竟做错了什么?

请注意,我已将这些条目添加到 /etc/bashrc 中,因为无论我以什么用户身份登录,我都希望在 PATH 中包含这些值。

谢谢,香农

linux bash

2
推荐指数
1
解决办法
3095
查看次数

操作 echo $PATH 的输出

我得到echo $PATH这个:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Run Code Online (Sandbox Code Playgroud)

我想要的是以以下格式获取这些:

/usr/local/sbin
/usr/local/bin
...
Run Code Online (Sandbox Code Playgroud)

我尝试做的事情:

i=1;
for dir in `echo $PATH|cut -d ':' -f $i`
do
    echo $dir
    i=`expr $i + 1`
done
Run Code Online (Sandbox Code Playgroud)

但这不起作用。有人可以帮我解答吗?

shell

0
推荐指数
1
解决办法
613
查看次数