检查 PATH 是否包含 $HOME/mydir 并添加它如果没有(全部在脚本中)

Jér*_*nge 12 path string shell-script environment-variables

可能的重复:在源代码中将重复项
保留在 $PATH 之外

我的一些脚本位于$HOME/mydir. 不幸的是,如果这个目录不是PATH.

我想创建一个小脚本,检查是否$HOME/mydir是PATH. 如果不是,PATH则应使用它和 进行更新EXPORTED。

我的问题是:我可以使用哪个命令来检查是否$HOME/mydir属于PATH? 谢谢。

解决方案

为了记录,我实现了以下内容:

echo "Before: $PATH"

echo $PATH | grep -q "$HOME/scripts"

if [ $? -eq 0 ]; then
  PATH=$PATH:$HOME/scripts
  export PATH
else
  export PATH
fi

echo ""
echo "After: $PATH"
Run Code Online (Sandbox Code Playgroud)

gle*_*man 23

我会写

case ":$PATH:" in
  *:$HOME/mydir:*) echo it is in the path;;
  *) echo not there ;;
esac
Run Code Online (Sandbox Code Playgroud)

如果所需的路径是 $PATH 中的第一个或最后一个,我会编写 ":$PATH:" 以确保模式匹配。


Rad*_*ado 7

您可以编写一个简单的 bash 脚本来执行此类操作。

echo $PATH | grep -q  "/your/search/path"
Run Code Online (Sandbox Code Playgroud)

然后检查是否 $? 不为 0,表示不匹配,如果匹配则添加路径

export PATH=$PATH:/your/search/path
Run Code Online (Sandbox Code Playgroud)

  • @jw013:没有正确、不正确的方法,有有效的方法,也有无效的方法,我认为 grep 方法有效。也许你的意思是在这种情况下使用 grep 浪费了一个过程,但我认为它非常干净且易于理解,所以如果性能不是问题的话就很好。也许您还意味着如果“/your/search/path”的子目录在您的路径中,它可能会中断,但它可以很容易地修复(感谢glennjackman的“:”想法)。它甚至可以简化为: `grep -q ":/your/search/path:" <<< ":$PATH:" || 导出 PATH=$PATH:/your/search/path`。 (3认同)