【问题标题】:How to call function from shell script from ruby如何从ruby的shell脚本调用函数
【发布时间】:2019-12-29 08:56:38
【问题描述】:

如何在 ruby​​ 中调用 shell 脚本中的函数(最好使用 open3)

#!/bin/sh
# A simple script with a function...

function add()
{
  echo "1"
}

Ruby 脚本不起作用--

#!/apollo/bin/env ruby
# -*- ruby -*-   
require 'open3'
Open3.capture3('.\something.sh', 'add')

【问题讨论】:

    标签: ruby shell popen3


    【解决方案1】:

    首先,您应该有一个valid bash function declaration

    假设something.sh 被更正为:

    #!/bin/sh
    # A simple script with a function...
    
    bar () {
      echo "1"
    }
    

    你必须将它的内容加载到当前的shell中在其中执行一个函数

    Open3.capture3(". ./something.sh && bar")
    #⇒ ["1\n", "", #<Process::Status: pid 17113 exit 0>]
    

    【讨论】:

      【解决方案2】:

      为了其他人发布答案的兴趣。基本上,我最终会做类似的工作 -

      #!/apollo/bin/env ruby
      # -*- ruby -*-   
      require 'open3'
      
      Open3.capture3(
          'bash',
          '-c',
          "source something.sh && add")
      

      基本上,Open3(由于 Ruby)在不同的会话中触发每个命令,因此脚本和方法调用的源应该在单个调用中完成。

      【讨论】:

      • 和我提议的有什么不同? .sourcebash 中的简写。
      • @AlekseiMatiushkin 这就是为什么我接受了你的回答并投了赞成票,但我想放上我的版本,因为它在 capture3 中使用了 bash -c 和参数化参数。
      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 2017-10-12
      • 2019-01-19
      • 2019-12-24
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多