-1

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

2 回答 2

1

首先,您应该有一个有效的 bash 函数声明

假设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>]
于 2019-08-24T13:31:00.850 回答
0

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

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

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

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

于 2019-08-26T13:46:41.910 回答