2013-03-13 106 views
2

我正忙于为我们的应用程序编写Capistrano部署脚本。将输出从shell脚本重定向到文件

run "cat ~/rvm-installer.sh | bash -s stable --ruby" 

不过,我觉得输出是太冗长了,我宁可要转存到.log文件:其中一个步骤,使用下面的命令RVM安装。是否有可能将整个rvm-installer.sh脚本的输出重定向到其他位置?

回答

3

像这样:

run "cat ~/rvm-installer.sh | bash -s stable --ruby >out.log" 

,或者,如果你想重定向过程的标准错误流,以及:

run "cat ~/rvm-installer.sh | bash -s stable --ruby >out.log 2>err.log" 

你也可以将所有重定向到同一个文件:

run "cat ~/rvm-installer.sh | bash -s stable --ruby >out.log 2>&1" 
+0

太棒了,我可以让它不能打印到屏幕上,因为这可行,但我仍然看到屏幕输出? – 2013-03-13 10:39:22

+0

如果你不想看到任何你可以运行Capistrano的选项'--quiet' – piokuc 2013-03-13 10:42:12

+0

如果你想重定向在同一个文件中的所有内容,那么你必须重定向stdout _before_ stderr,就像这样'> out.log 2> &1'。当你执行'i>&j'时,这意味着_i_指向的文件的所有输出都会被发送到_j_指向的文件。重定向从左到右进行。当你第一次将stderr重定向到stdout指向的同一个文件时,stderr指向控制台输出。之后,当你将stdout重定向到文件'out.log'时,它确实改变了stderr,它仍然指向控制台输出。有关http://www.tldp.org/LDP/abs/html/io-redirection.html的更多信息 – cbliard 2013-03-13 11:32:48