Linux查找二进制文件

3

我正尝试在Linux系统中查找一个二进制文件,可以使用以下命令:

if [ -f `which $1` ] then
    echo "File Found"
else
    echo "File not Found"
fi

虽然代码可以正常工作,但问题是"which"将返回一个空操作符,而BASH将其解释为存在的东西,因此文件总是返回找到。有任何建议都可以。
谢谢
3个回答

6

更新

经过一些思考,没有理由使用 [[ ]](或者同样也没有理由使用 [ ])。甚至也没有必要使用命令替换符 $()

if which "$1" > /dev/null 2>&1; then
  echo "found"
else
  echo "not found"
fi

如果您正在使用 bash,请使用[[ ]]构造。 其中一个好处(众多好处之一)是它没有这个问题

[[ -f $(which $1) ]] && echo found

此外,“``”已被弃用,请使用$()代替。

你有钱吗?在这个经济时代,我们可不会白送方括号。(which "/bin/ls")..失败时保持沉默,成功时打印路径。 - synthesizerpatel
@synthesizerpatel 我想你的意思是 hash "/bin/ls"。但你说得对,新答案没有两个括号和四个大括号。现在每个人都能负担得起运行它了! - SiegeX

3
if [ `which "$1"` != "" ]; then

当找到二进制文件时,which 不会返回 ""

1

我喜欢在编程中使用“哈希”(如果你是Bash用户的话...)(实际上,它比其他方法更具可移植性)

hash blahblah

bash: hash: lklkj: 找不到命令

hash /bin/ls <-- silently successful

这种方法在 Linux 和 OSX 上的工作方式类似,而“which”具有不同的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接