如何将shell脚本变量传递回ruby?

时间:2016-03-10 04:09:07

标签: ruby shell fastlane

我有一个执行shell脚本的ruby脚本。如何将shell脚本数据传递回ruby脚本。

var newUser     = new User({
        first_name              : req.body.first_name,
        last_name               : req.body.last_name,
        user_name               : req.body.user_name,
        email                   : req.body.email,
        password                : req.body.password,
        password_confirmation   : req.body.password_confirmation,           
        create_date             : d.toLocaleString()
    });
    newUser.save(function(err) {
        if (err){
            //console.log(err);
            components.Error.normalize(err,function(returnData) {
                //console.log(returnData);
                res.status(207).json({status:0,error:returnData});
            });
        }else{
            res.status(200).json({status:1,message:'User saved successfully'});
        }            
    });

我可以使用从ruby到shell脚本的环境变量来执行相反的方案。

      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

由于

2 个答案:

答案 0 :(得分:2)

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

output = %x[ ls ]

根据您的真实需要,有其他可能有用的技术 - 例如。

  1. Exporting an Environment Variable in 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

答案 1 :(得分:1)

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

eval `scriptsettings.sh`

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