Bash:如何向路径添加子目录

Bash:如何向路径添加子目录,bash,path,Bash,Path,在.bashrc中,我添加了一个dir,在其中放置了一些脚本。是否可以自动添加其所有子目录,这样我就不必手动逐个添加它们?(而且不必每次我都访问.bashrc,我会在那里做一个dir) 编辑: 使用Laurent Legrand的解决方案,这就是我现在使用的: PATH=$PATH:/usr/local/share/NAMD_2.7_Linux-x86_64:/usr/local/share/jmol-12.0.31:/usr/local/share/NAMD_2.7_Linux-x86_64_

.bashrc
中,我添加了一个dir,在其中放置了一些脚本。是否可以自动添加其所有子目录,这样我就不必手动逐个添加它们?(而且不必每次我都访问
.bashrc
,我会在那里做一个dir)

编辑

使用Laurent Legrand的解决方案,这就是我现在使用的:

PATH=$PATH:/usr/local/share/NAMD_2.7_Linux-x86_64:/usr/local/share/jmol-12.0.31:/usr/local/share/NAMD_2.7_Linux-x86_64_orig:/usr/local/share/sage-4.6.2:/opt/mongoDB/bin

PATH=$PATH:$(find ~/Study/geek/scripts -type d -printf "%p:")

这将在.bashrc中添加目录及其子目录。

假设所有脚本都在~/bin下

maindir=~/bin
for subdir in `tree -dfi $maindir`
do
    PATH=$PATH:$subdir
done
export $PATH

可以在您的.bashrc中完成此操作…

假设您的所有脚本都在~/bin下

maindir=~/bin
for subdir in `tree -dfi $maindir`
do
    PATH=$PATH:$subdir
done
export $PATH

我能做到这一点…

像这样的方法应该行得通

 PATH=$PATH:$(find your_dir -type d -printf "%p:")

这样的办法应该行得通

 PATH=$PATH:$(find your_dir -type d -printf "%p:")

这是将
/opt
目录中的可执行文件添加到路径的最佳做法:

for subdir in $(find /opt -maxdepth 1 -mindepth 1 -type d); do
  PATH="$subdir/bin:$PATH"
done
export $PATH
由于所有需要的可执行文件都应该在
/opt/*/bin
中,我们使用
-maxdepth 1
/opt
目录本身以及
-mindepth 1
来避免超出
/opt/*
的子目录。还要注意,我们在每个目录的末尾添加了
/bin

同样的情况也可以应用于脚本。如果您需要更多的深度,只需修改
-maxdepth
的值,或将其完全删除为无限级别(如果应该包括主脚本路径,则同样适用于
-mindepth
如果在多个子目录级别中可以找到相同的脚本名称,请注意歧义。

因此,在您的情况下,您可以只使用:

for subdir in $(find $HOME/path/to/scripts -type d); do
  PATH="$subdir:$PATH"
done
export $PATH

这是将
/opt
目录中的可执行文件添加到路径的最佳做法:

for subdir in $(find /opt -maxdepth 1 -mindepth 1 -type d); do
  PATH="$subdir/bin:$PATH"
done
export $PATH
由于所有需要的可执行文件都应该在
/opt/*/bin
中,我们使用
-maxdepth 1
/opt
目录本身以及
-mindepth 1
来避免超出
/opt/*
的子目录。还要注意,我们在每个目录的末尾添加了
/bin

同样的情况也可以应用于脚本。如果您需要更多的深度,只需修改
-maxdepth
的值,或将其完全删除为无限级别(如果应该包括主脚本路径,则同样适用于
-mindepth
如果在多个子目录级别中可以找到相同的脚本名称,请注意歧义。

因此,在您的情况下,您可以只使用:

for subdir in $(find $HOME/path/to/scripts -type d); do
  PATH="$subdir:$PATH"
done
export $PATH

我会在那里添加一个文件测试:
if[-d“$maindir/$subdir”];然后PATH=“$PATH:$maindir/$subdir”;fi
谢谢mkb我用-d选项替换ls by tree,该选项只列出默认情况下通常安装的目录树?我的两个最方便的机器都没有它。不知道每一个分布,但MAC和Debian基地还没有,因为它不被认为是一个“基础”包。但这是一个非常方便的工具,可以全天使用。我会在这里添加一个文件测试:
if[-d“$maindir/$subdir”];然后PATH=“$PATH:$maindir/$subdir”;fi
谢谢mkb我用-d选项替换ls by tree,该选项只列出默认情况下通常安装的目录树?我的两个最方便的机器都没有它。不知道每一个分布,但MAC和Debian基地还没有,因为它不被认为是一个“基础”包。但这是一个非常方便的工具,适合全天使用。很好的一个工具,但在PATH变量中会有一个最后的冒号。这真的是你想要的吗?这里有一个可能使用sed:
PATH=$PATH:$(找到您的_dir-type d-printf”%p:“| sed-e的/:$//g')
,它将删除最后一个冒号。这很好,但在PATH变量中会有最后一个冒号。这真的是你想要的吗?这里有一个使用sed的可能修复方法:
PATH=$PATH:$(找到您的_dir-type d-printf“%p:| sed-e的/:$//g”)
这将删除最后一个冒号。您确定使用@LaurentLegrand解决方案在
路径
变量中没有最后一个冒号吗?我有它-但它是这样工作的-我的系统知道子目录中的文件。确实可以,但您不应该在
路径
变量中有冒号和结束冒号。考虑一下现成Linux操作系统中的默认
PATH
变量。这是我给root用户的:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
您确定使用@LaurentGrand解决方案在
路径
变量中没有最后一个冒号吗?我有它-但它是这样工作的-子目录中的文件对我的系统来说是已知的。确实有效,但您不应该有和在
路径
变量中结束冒号。考虑一下现成Linux操作系统中的默认
PATH
变量。这是我给root用户的:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin