可能重复:
Bash: Detect if user's path has a specific directory in it
给定一个目录,如何确定它是否在unix PATH上?寻找shell脚本。
谢谢, 凯文
答案 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