Ruby on rails “如何从rails runner捕获输出”;MyCloud::Deployment.checkuser“;在bash shell上
我希望在bash提示符下运行以下命令时捕获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”窗口中运行这个命令。我如何着手
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”)“您尝试过吗?结果如何?我确实相信,这正是它在标签上所说的。如果命令在标准输出上没有打印任何内容,那么这就是您将得到的结果。