如何检查目录是否在Bash的路径上?

时间:2012-03-12 01:13:21

标签: bash

  

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

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

谢谢, 凯文

5 个答案:

答案 0 :(得分:19)

你可以写:

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冒号是否包含冒号目录冒号。

答案 1 :(得分:4)

快速而肮脏:您可以通过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为例。

答案 2 :(得分:4)

我通常更喜欢case - 发布此内容以使设置完整( - :

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

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

答案 3 :(得分:0)

我可能会有类似的东西,就是回应现有的$ 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

答案 4 :(得分:-1)

也许它会有所帮助:

#!/bin/bash

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