Unix 如何以编程方式检查程序';谁的存在?
假设我正在编写一些依赖于外部程序的东西,比如Unix 如何以编程方式检查程序';谁的存在?,unix,language-agnostic,Unix,Language Agnostic,假设我正在编写一些依赖于外部程序的东西,比如svn。如何自动检查它们是否存在,以便在它们不存在时打印有用的错误消息?通过路径进行迭代是可能的,但很难做到优雅和高效。有更清洁的解决方案吗 我在引导脚本中见过这种行为,但我不记得在哪里。它看起来有点像这样: checking for gcc... yes 如果您使用的是bash,则可以使用类型内置: $ type -f svn svn is /usr/bin/svn 如果要在脚本中使用它: $ type -f svn &>/dev/
svn
。如何自动检查它们是否存在,以便在它们不存在时打印有用的错误消息?通过路径
进行迭代是可能的,但很难做到优雅和高效。有更清洁的解决方案吗
我在引导脚本中见过这种行为,但我不记得在哪里。它看起来有点像这样:
checking for gcc... yes
如果您使用的是bash,则可以使用
类型
内置:
$ type -f svn
svn is /usr/bin/svn
如果要在脚本中使用它:
$ type -f svn &>/dev/null; echo $?
0
$ type -f svn_doesnt_exist &>/dev/null; echo $?
1
试着打电话给它 使用
-V
或使程序报告其版本的任何其他选项来调用它最有意义;大多数时候,您希望程序至少是这样或那样的版本
如果你的程序是一个shell脚本,
哪个
也是你的朋友。当你说“程序”时,你到底是什么意思?二进制文件?你说的是linux吗?@MostyMostacho基本上可以通过C语言中的system()
或通过命令行调用任何东西。是的,Linux/Unix。(参见标签。)与相比,这有什么好处?这是我通常使用的。@SanjayManohar它是一个程序,但是类型是一个shell内置的。此外,type
还可以找到函数之类的东西,并可以剪切别名。例如,如果您给一个命令加别名,键入
将告诉您该别名,而哪个
将找不到任何内容。-1:绝对不要盲目地运行命令,除非您绝对确定运行该程序不会有害。@FooBah:如果您没有访问包系统等的权限,您只能查看给定名称的可执行文件是否存在于路径上。尝试执行将搜索路径
,然后运行命令或返回错误。手工操作会带来什么安全性或健壮性?