在环境 PATH 中添加 ~/projects/*/bin 目录(Ubuntu 16.04)

在环境 PATH 中添加 ~/projects/*/bin 目录(Ubuntu 16.04)

所有内容都在标题中。我知道如何在环境PATH变量中添加新路径,但我想通过自动添加/bin我所有未来项目的文件夹来使其递归。

类似于,替换这个:

PATH=$PATH:~/projects/project1/bin
PATH=$PATH:~/projects/project2/bin
..
PATH=$PATH:~/projects/projectN/bin

这样:

PATH=$PATH:~/projects/*/bin

问题:每次我把 放进*去,系统都无法识别。您有办法解决吗?

我正在使用 Ubuntu 16.04

答案1

要完成这样的任务,您需要在大多数 shell 中将一些代码放入所谓的子命令中。在 Bash 中,其符号为$(...some command...)

方法

$ find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g'

此行代码将生成包含子目录的目录列表/bin。它并非 100% 完美,因为它无法处理名称中包含空格的目录,但如果你知道你的情况符合此规则,那么你可以使用它。

使用上面的代码片段你可以构建$PATH如下代码:

PATH=$PATH:$(find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g')

例子

在此示例中,我将使用 来$MYPATH替代$PATH。首先,我们已经在 中包含了一些目录$MYPATH

$ MYPATH=/path1/bin:/path2/bin
$ echo $MYPATH
/path1/bin:/path2/bin

现在将所有~/project*/bin目录添加到$MYPATH

$ MYPATH=$MYPATH:$(find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g')
$ echo $MYPATH
/path1/bin:/path2/bin:/Users/slm/project1/bin:/Users/slm/project2/bin:/Users/slm/project3/bin

相关内容