我在Linux上使用Ruby。我想测试Linux系统上是否存在一个命令。
我不想返回我正在测试的命令的输出。
我也不想返回由于shell找不到命令而产生的任何输出。
我希望避免在发送到shell的命令中使用shell重定向。因此,像system这样的东西(“foo> /dev/null")是不合适的。
如果有方法可以从Ruby中进行重定向,那么我可以使用重定向。
发布于 2022-01-06 06:51:40
最简单的事情就是使用system。假设你在找ls。
irb(main):005:0> system("which ls")
/bin/ls
=> true如果这不在表中,您可以查看ENV["PATH"]中的目录,以查找要查找的可执行文件。ENV["PATH"].split(":")将为您提供一个目录名数组,以检查所需的命令。如果您找到一个具有正确名称的文件,您可能希望确保它是一个可执行文件。
发布于 2022-01-06 07:49:31
我希望避免在发送到shell的命令中使用shell重定向。因此,像system这样的东西(“foo> /dev/null")是不合适的。如果有方法可以从Ruby中进行重定向,那么我可以使用重定向。
system("exec which cmd", out: "/dev/null")
puts "Command is available." if ($?).success?exec是为了显式地避免shell中不必要的分叉。
作为一个sidenote,可以使用type -P代替which,但是它依赖于Bash,如果脚本被移植到具有不同默认shell的环境中,可能会产生令人惊讶的效果。
https://stackoverflow.com/questions/70603367
复制相似问题