首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ruby:如何测试linux命令是否可用,而不返回我正在测试的命令的输出?

使用Ruby:如何测试linux命令是否可用,而不返回我正在测试的命令的输出?
EN

Stack Overflow用户
提问于 2022-01-06 06:33:58
回答 2查看 87关注 0票数 0

我在Linux上使用Ruby。我想测试Linux系统上是否存在一个命令。

我不想返回我正在测试的命令的输出。

我也不想返回由于shell找不到命令而产生的任何输出。

我希望避免在发送到shell的命令中使用shell重定向。因此,像system这样的东西(“foo> /dev/null")是不合适的。

如果有方法可以从Ruby中进行重定向,那么我可以使用重定向。

EN

回答 2

Stack Overflow用户

发布于 2022-01-06 06:51:40

最简单的事情就是使用system。假设你在找ls

代码语言:javascript
复制
irb(main):005:0> system("which ls")
/bin/ls
=> true

如果这不在表中,您可以查看ENV["PATH"]中的目录,以查找要查找的可执行文件。ENV["PATH"].split(":")将为您提供一个目录名数组,以检查所需的命令。如果您找到一个具有正确名称的文件,您可能希望确保它是一个可执行文件。

票数 1
EN

Stack Overflow用户

发布于 2022-01-06 07:49:31

我希望避免在发送到shell的命令中使用shell重定向。因此,像system这样的东西(“foo> /dev/null")是不合适的。如果有方法可以从Ruby中进行重定向,那么我可以使用重定向。

代码语言:javascript
复制
system("exec which cmd", out: "/dev/null")
puts "Command is available." if ($?).success?

exec是为了显式地避免shell中不必要的分叉。

作为一个sidenote,可以使用type -P代替which,但是它依赖于Bash,如果脚本被移植到具有不同默认shell的环境中,可能会产生令人惊讶的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70603367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档