gpt4 book ai didi

ruby - 如何从 Ruby 调用 shell 命令

转载 作者:数据小太阳 更新时间:2023-10-29 06:16:03 30 4
gpt4 key购买 nike

如何从 Ruby 程序内部调用 shell 命令?然后如何将这些命令的输出返回到 Ruby 中?

最佳答案

此解释基于评论Ruby script来 self 的一个 friend 。如果您想改进脚本,请随时在链接上更新它。

首先,请注意,当 Ruby 调用 shell 时,它通常会调用 /bin/sh不是 Bash。 /bin/sh 不支持某些 Bash 语法在所有系统上。

以下是执行 shell 脚本的方法:

cmd = "echo 'hi'" # Sample string that can be used
  1. Kernel#` , 通常称为反引号 – `cmd`

    这与许多其他语言一样,包括 Bash、PHP 和 Perl。

    返回 shell 命令的结果(即标准输出)。

    文档:http://ruby-doc.org/core/Kernel.html#method-i-60

    value = `echo 'hi'`
    value = `#{cmd}`
  2. 内置语法,%x( cmd )

    x 之后character 是分隔符,可以是任意字符。如果分隔符是字符之一 ( , [ , { , 或 < ,文字由匹配的结束定界符之前的字符组成,考虑到嵌套的定界符对。对于所有其他定界符,文字包含直到下一次出现的字符分隔符。字符串插值 #{ ... }是允许的。

    返回 shell 命令的结果(即标准输出),就像反引号一样。

    文档:https://docs.ruby-lang.org/en/master/syntax/literals_rdoc.html#label-Percent+Strings

    value = %x( echo 'hi' )
    value = %x[ #{cmd} ]
  3. Kernel#system

    在子 shell 中执行给定的命令。

    返回 true如果找到命令并成功运行,false否则。

    文档:http://ruby-doc.org/core/Kernel.html#method-i-system

    wasGood = system( "echo 'hi'" )
    wasGood = system( cmd )
  4. Kernel#exec

    通过运行给定的外部命令替换当前进程。

    不返回,当前进程被替换并且不再继续。

    文档:http://ruby-doc.org/core/Kernel.html#method-i-exec

    exec( "echo 'hi'" )
    exec( cmd ) # Note: this will never be reached because of the line above

这里有一些额外的建议: $? ,与 $CHILD_STATUS 相同, 如果使用反引号 system(),则访问上次系统执行命令的状态或 %x{} .然后您可以访问 exitstatuspid属性:

$?.exitstatus

更多阅读请看:

关于ruby - 如何从 Ruby 调用 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com