我正试图做相反的事情
我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.
我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.
有什么想法吗?
我在ruby中有一堆系统调用,如下所示,我想同时检查它们的退出代码,以便在该命令失败时我的脚本退出.
system("VBoxManage createvm --name test1")
system("ruby test.rb")
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
system("VBoxManage createvm --name test1", 0) < - 第二个参数检查退出代码并确认系统调用成功,如果没有,则会引发错误或执行某种操作.
这有可能吗?
我已经尝试过这方面的事情,但也没有用.
system("ruby test.rb")
system("echo $?")
Run Code Online (Sandbox Code Playgroud)
要么
`ruby test.rb`
exit_code = `echo $?`
if exit_code != 0
raise 'Exit code is not zero'
end
Run Code Online (Sandbox Code Playgroud) ``Backtick%x{}百分比X <Backtick的替代语法system()fork()open()IO.popen()<表现相同open()open("|-")IO.popen("-")<表现相同open("|-")Open3.popen3()require 'open3'PTY.spawn()require 'pty'Shell.transact()require 'shell'编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.
他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用或为什么,并因此恕我直言这个问题不完整的答案.
在ruby中隐藏系统命令的结果有多容易?例如,我的一些脚本运行
system "curl ..."
Run Code Online (Sandbox Code Playgroud)
我不希望看到下载的结果.
在这些示例中,例如:
从bundle exec调用的命令中将shell打包
要么
封装到不属于您当前捆绑包的Ruby命令中,
http://bundler.io/man/bundle-exec.1.html
要么
我要在rake任务中使用heroku命令
这个问题是关于从rspec环境启动外部项目的rails服务器.
有2个项目.
我正在尝试测试这两个rails项目之间的API交互,我想设置rspec,这样我就可以在BackOffice项目中编写和维护我的spec文件.这些规范将启动ApiServer rails服务器,然后播放以执行测试.
我的问题是关于启动ApiServer rails服务器.在查看rails app初始化文件后,我假设我必须向"config/environment"添加一个require.
但是当我插入BackOffice/spec/spec_helper.rb时
require File.expand_path('../../../ApiServer/config/environment', __FILE__)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
`initialize!': Application has been already initialized. (RuntimeError)
# Backtrace to the file:
# ApiServer/config/environment.rb
# Line:
# Rails.application.initialize!
Run Code Online (Sandbox Code Playgroud)
我还尝试在反引号中简单地调用以下内容
`cd /api/path; bundle exec rails s -p 3002`
Run Code Online (Sandbox Code Playgroud)
但得到了同样的错误
然后我从Capybara源代码中获得灵感,并且需要"ApiServer/application",然后我能够创建一个ApiServer.new对象,但是一旦我调用initialize!它就会得到相同的消息.
任何帮助是极大的赞赏.干杯
如何将环境变量传递给我使用Kernel#systemet al 执行的shell命令?
说,我想跑
%x{git checkout -f}
Run Code Online (Sandbox Code Playgroud)
但是这个命令依赖于环境变量$GIT_WORK_TREE.我该怎么设置呢?
我很好奇是否有一种将bash命令转换为ruby脚本的简单方法.
如果在命令行中键入此内容,则会获得ip网络列表.
whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以在Ruby中执行类似的操作,或者我是否必须手动编写代码?
对不起noob问题,并提前感谢您的帮助!
我正在创建一个新的CLI应用程序,我想从用户那里获得一些敏感的输入.因为,这个输入可能非常具有描述性,而且信息有点敏感,我想允许用户从这个应用程序输入这样的命令:
app new entry
Run Code Online (Sandbox Code Playgroud)
在此之后,我想为用户提供一个VIM会话,他可以在其中编写这个描述性输入,当他退出此VIM会话时,我的脚本将捕获该输入并用于进一步处理.
有人可以告诉我一个方法(可能是一些隐藏的VIM功能 - 因为,我总是对它们感到惊讶)所以我可以这样做,而不创建任何临时文件?正如下面的评论中所解释的,我更喜欢一些内存文件,因为信息可能有点敏感,因此,我想首先通过我的脚本处理它,然后只将它写入磁盘加密的方式.
内容a.rb是:
if system("mount | grep /boot") != ""
print "true" # or do something
else
print "false" # or do something else
end
Run Code Online (Sandbox Code Playgroud)
运行此代码不会打印"true"或"false",但会打印系统调用的输出.
]$ ruby a.rb
/dev/sda1 on /boot type ext4 (rw)
Run Code Online (Sandbox Code Playgroud)
检查if条件的正确语法是什么?