如何从 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')
首先,您应该有一个有效的 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>]
为了其他人发布答案的兴趣。基本上,我最终会像 -
#!/apollo/bin/env ruby
# -*- ruby -*-
require 'open3'
Open3.capture3(
'bash',
'-c',
"source something.sh && add")
基本上 Open3(由于 Ruby)在不同的会话中触发每个命令,因此脚本和方法调用的源应该在单个调用中完成。