【问题标题】:How can I check if a directory is on the path in Bash? [duplicate]如何检查目录是否在 Bash 的路径上? [复制]
【发布时间】:2022-01-02 15:57:09
【问题描述】:

可能重复:
Bash: Detect if user's path has a specific directory in it

给定一个目录,我如何确定它是否在 unix PATH 上?正在寻找一个 shell 脚本。

谢谢, 凯文

【问题讨论】:

  • 为什么目录比可执行文件更重要?
  • 如果您要查找的 shell 脚本是可执行的,您可能需要使用 which 来简化。
  • 我确实想投票结束这个,但我在谷歌和网站上搜索了我的术语,但找不到任何东西,所以也许有这个也不错。由你决定
  • @KevinBurke:关闭的问题仍然可以通过 Google 找到,只要它们没有被删除。

标签: bash


【解决方案1】:

我通常更喜欢case——发布这个是为了让整个系列变得完整(-:

case :$PATH: in
  *:/home/you/bin:*)  ;;  # do nothing
  *) PATH=/home/you/bin:$PATH ;;
esac

注意 case 表达式的前导和尾随冒号,以简化模式。使用case $PATH,您必须比较四种不同的模式,具体取决于匹配的开始和结束是在变量的开头还是结尾。

【讨论】:

  • 优雅,确实很好。
【解决方案2】:

我可能会有类似的东西,那就是回显现有的 $PATH 和模式的 grep。

#!/bin/sh

if [ $# -ne 1 ]; then
 echo "$0 <dir>"
 exit 1
fi 

dir=${1%/};

if [ `echo :$PATH: | grep -F :$dir:` ]; then
   echo "$dir is in the UNIX path"
else
   echo "$dir is not in the UNIX path"
fi

【讨论】:

  • 如果目录位于路径的第一个或最后一个,则会失败。当然,这很容易解决,但是,请参阅其他答案。
  • 感谢伙伴的错误检测并更新了答案。感谢您的意见。
  • 虽然不完全正确。您希望echo :$PATH: 确保正确分隔路径。您可能还想使用fgrep 来避免意外的正则表达式字符匹配错误的内容。
  • 是否需要更多更改,或者您可以这样做吗? (-;
  • Welp,你可以复制/粘贴我的答案,但我必须杀了你。 (-:
【解决方案3】:

也许它可以帮助:

#!/bin/bash

DIR="/usr/xbin"
[ `echo ":$PATH:" | grep :$DIR:` ] && echo true || echo false

【讨论】:

    【解决方案4】:

    你可以写:

    if [[ :$PATH: == *:"$directory_you_want_to_check":* ]] ; then
        # O.K., the directory is on the path
    else
        # oops, the directory is not on the path
    fi
    

    请注意,这不会跟随符号链接或类似的东西;这只是一个字符串比较,检查冒号-$PATH-colon 是否包含冒号-目录-冒号。

    【讨论】:

      【解决方案5】:

      又快又脏:您可以通过grep 回显(稍作修改的)路径并检查返回值:

      pax> echo ":$PATH:" | grep :/usr/sbin:
      :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
      
      pax> echo $?
      0
      
      pax> echo ":$PATH:" | grep :/usr/xbin:
      
      pax> echo $?
      1
      

      通过将: 放在您要查找的路径和目录的任一端,您只需使用grep 表达式并确保只找到完整的路径。否则,例如,寻找/usr/bin 可能会出现/usr/bin/xyzzy

      【讨论】:

        猜你喜欢
        • 2016-09-10
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-31
        • 2015-06-20
        • 1970-01-01
        相关资源
        最近更新 更多