从Rakefile执行bash命令
这个问题在这里已经有了答案:
我认为耙子想要发生的方式是:http://rubydoc.info/gems/rake/FileUtils#sh-instance_method例如:
task :test do
sh "ls"
end
内置rake函数sh负责处理命令的返回值(如果命令的返回值不是0,则任务失败),并且还会输出命令输出。
有几种方法可以在ruby中执行shell命令。 一个简单的(也许是最常见的)是使用反引号:
task :hello do
`echo "World!"`
end
在shell命令的标准输出成为返回值的情况下,反引号具有很好的效果。 例如,你可以通过ls
的输出
shell_dir_listing = `ls`
但是还有很多其他的方法可以调用shell命令,它们都有好处/缺点并且工作方式不同。 这篇文章详细解释了这些选择,但是这里有一个快速总结的可能性:
stdout =%x {cmd} - 反引号的替代语法,在幕后它做同样的事情
exec(cmd) - 用新的cmd进程完全替换正在运行的进程
成功=系统(cmd) - 运行一个子进程并在成功/失败时返回true / false(基于cmd退出状态)
IO#popen(cmd){| io | } - 运行一个子进程并将stdout和stderr连接到io
stdin,stdout,stderr = Open3.popen3(cmd) - 运行一个子进程并连接到所有管道(in,out,err)
%{echo "World!"}
定义一个String。 我希望你想%x{echo "World!"}
。
%x{echo "World!"}
执行命令并返回输出(stdout)。 你不会看到结果。 但你可以这样做:
puts %x{echo "World!"}
有更多方法可以调用系统命令:
system( cmd )
popen
Open3#popen3