1

I have a ruby script executing a shell script. How can I pass shell script data back to the ruby script.

      desc "Runs all the tests"
      lane :test do 

        sh "../somescript.sh"

        print variables_inside_my_script // i want to access my script data here.

      end

I'm able to do the reverse scenario using environment variables from ruby to shell script.

      desc "Runs all the tests"
      lane :test do 

        puts ENV["test"]

        sh "../somescript.sh" // access test using $test

      end

Thanks

4

2 回答 2

2

不清楚variables_inside_my_script在这里应该是什么意思,但作为一项规则,操作系统不允许将变量从子外壳“导出”到父外壳,因此 ruby​​ists 经常使用反引号(或等效)调用子命令,以便父外壳可以读取子shell的输出(stdout),例如

output = %x[ ls ]

根据您的实际需要,有一些替代技术可能有用 - 参见例如

  1. 在 Ruby 中导出环境变量

  2. http://tech.natemurray.com/2007/03/ruby-shell-commands.html

  3. http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html

于 2016-03-10T04:58:34.073 回答
1

如果 shell 脚本在您的控制之下,请让脚本以 Ruby 语法将环境定义写入 STDOUT。在 Ruby 中,您eval的输出是:

eval `scriptsettings.sh`

如果您的脚本产生其他输出,请将环境定义写入临时文件并使用load命令读取它们。

于 2016-03-10T08:13:07.897 回答