【问题标题】:Redirect output from a shell script to a file将 shell 脚本的输出重定向到文件
【发布时间】:2013-03-13 10:34:15
【问题描述】:

我正忙着为我们的一个应用程序编写 Capistrano 部署脚本。其中一个步骤使用以下命令安装 RVM:

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

但是,我觉得输出过于冗长,我宁愿将其转储到 .log 文件中。是否可以将整个 rvm-installer.sh 脚本的输出重定向到其他地方?

【问题讨论】:

    标签: bash shell rvm capistrano


    【解决方案1】:

    像这样:

    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"
    

    【讨论】:

    • 太棒了,我可以让它不打印到屏幕上吗,因为这有效,但我仍然看到屏幕输出?
    • 如果您不想看到任何内容,您可以使用选项--quiet 运行 Capistrano
    • 如果你想重定向同一个文件中的所有内容,那么你必须重定向stdout before stderr,像这样> out.log 2>&1。当您执行i>&j 时,这意味着i 指向的文件的所有输出都将发送到j 指向的文件。重定向是从左到右执行的。当您第一次将 stderr 重定向到 stdout 指向的同一文件时,stderr 将指向控制台输出。之后,当您将 stdout 重定向到文件 out.log 时,它确实会更改仍然指向控制台输出的 stderr。更多信息tldp.org/LDP/abs/html/io-redirection.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多