Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails “如何从rails runner捕获输出”;MyCloud::Deployment.checkuser“;在bash shell上_Ruby On Rails_Ruby_Bash_Shell - Fatal编程技术网

Ruby on rails “如何从rails runner捕获输出”;MyCloud::Deployment.checkuser“;在bash shell上

Ruby on rails “如何从rails runner捕获输出”;MyCloud::Deployment.checkuser“;在bash shell上,ruby-on-rails,ruby,bash,shell,Ruby On Rails,Ruby,Bash,Shell,我希望在bash提示符下运行以下命令时捕获bash shell上的输出 rails runner "MyCloud::Deployment.checkuser" 基本上,checkuser()返回1或0的值,我想在启动“rails runner”命令的shell中捕获该值 根据shell中的写入值,我想执行其他一些命令。这个checkuser()连接到云,访问SQL server并返回值,因此我需要加载rails环境 我在hudson的“ExecuteShell”窗口中运行这个命令。我如何着手

我希望在bash提示符下运行以下命令时捕获bash shell上的输出

rails runner "MyCloud::Deployment.checkuser"
基本上,
checkuser()
返回1或0的值,我想在启动“rails runner”命令的shell中捕获该值

根据shell中的写入值,我想执行其他一些命令。这个
checkuser()
连接到云,访问SQL server并返回值,因此我需要加载rails环境

我在hudson的“ExecuteShell”窗口中运行这个命令。我如何着手完成这项任务? rake能帮我吗

编辑:

#为了保持简单: 模块MyCloud 类部署 def self.checkuser 返回20 结束 结束 结束 我正在运行来自ubuntu box的命令: sreeni@ubuntu:~/work/co/RoR$res=“$(rails运行程序“MyCloud::Deployment.checkuser”)” sreeni@ubuntu:~/work/co/RoR$echo$res sreeni@ubuntu:~/work/co/RoR$
我想捕获从check_user()返回给bash shell上变量的值。

编辑:您将返回值(返回给同一语言调用方的对象)与文本输出混为一谈。您需要
put 20
将其捕获为字符串。如果没有一种或类似的机制,您无法用另一种语言捕获一种语言的返回值。一个罕见的例外是*nix shell(如Bash和Dash)之间的接口,在这里可以从一个shell捕获另一个shell的返回值,因为它们都实现了类似于

要获取退出代码,请测试命令或
$?

rails runner "MyCloud::Deployment.checkuser"
if [ $? -eq 0 ]
then
    echo "Success"
else
    echo "Failure"
fi
简表:

if rails runner "MyCloud::Deployment.checkuser"
then
    echo "Success"
else
    echo "Failure"
fi
if [ "$(rails runner "MyCloud::Deployment.checkuser")" = '0' ]
then
    echo "Success"
else
    echo "Failure"
fi
要获得字符串输出,请使用(是的,):

简表:

if rails runner "MyCloud::Deployment.checkuser"
then
    echo "Success"
else
    echo "Failure"
fi
if [ "$(rails runner "MyCloud::Deployment.checkuser")" = '0' ]
then
    echo "Success"
else
    echo "Failure"
fi
要捕获输出和退出代码,请执行以下操作:

result="$(rails runner "MyCloud::Deployment.checkuser")"
exit_code=$?

你有没有试着保存它?不清楚你在问什么。您指的是返回的值
0
1
,还是退出代码?如果“execute shell”步骤没有返回0,hudson不会自动中止运行吗?checkUser()根据用户是否存在返回1或0;我指的不是退出状态。我从bash命令提示符启动rails runner命令,并希望在bash shell中捕获其输出。@I0b0:checkuser()返回一个我想要捕获的值,但不返回退出状态。假设它返回20,我想捕获它。请澄清你想要什么。答案清楚地涵盖了退出代码和输出。除了shell代码中的退出代码之外,没有“返回值”之类的东西。这不是有效的命令结果=“$(rails runner“MyCloud::Deployment.checkuser”)“您尝试过吗?结果如何?我确实相信,这正是它在标签上所说的。如果命令在标准输出上没有打印任何内容,那么这就是您将得到的结果。