我试图在Linux系统中使用以下内容找到二进制文件:
if [ -f `which $1` ] then
echo "File Found"
else
echo "File not Found"
fi
虽然代码工作正常但问题是“哪个”将返回一个null运算符,BASH将其解释为存在的东西,因此总会找回文件。任何建议都会很棒。
由于
答案 0 :(得分:6)
经过一番思考,没有理由使用[[ ]]
(或[ ]
来解决这个问题)。甚至没有理由使用命令替换$()
if which "$1" > /dev/null 2>&1; then
echo "found"
else
echo "not found"
fi
如果您使用的是bash
,请使用[[ ]]
构造。其中一个好处(许多)是它没有这个问题
[[ -f $(which $1) ]] && echo found
此外,``已弃用,请改用$()
答案 1 :(得分:3)
if [ `which "$1"` != "" ]; then
which
在找到二进制文件时不会返回""
。
答案 2 :(得分:1)
我喜欢'hash'这个(如果你是一个bash用户......)(实际上它的行为比它更容易)
hash blahblah
bash:hash:lklkj:not found
hash /bin/ls <-- silently successful
此方法在Linux和OSX上的工作方式类似,其中“哪个”具有不同的行为。