如何从 ruby 的 shell 脚本调用函数

How to call function from shell script from ruby

如何从 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')

首先,你应该有一个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>]

为了其他人发布答案的兴趣。基本上,我最终会像 -

#!/apollo/bin/env ruby
# -*- ruby -*-   
require 'open3'

Open3.capture3(
    'bash',
    '-c',
    "source something.sh && add")

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