【问题标题】:bash "command1 || echo failed" write to the same filebash "command1 || echo failed" 写入同一个文件
【发布时间】:2017-02-03 22:44:57
【问题描述】:

如何将命令输出或“失败”写入同一个文件?我正在尝试的是如下所示

command1 || echo failed > myfile.out

上面的命令没有按预期工作。它总是打印失败作为 myfile.out 的输出

【问题讨论】:

  • 你可以试试“(command1 || echo failed) > myfile.out”
  • { command1 || echo failed; } > myfile.out -- 括号强制命令由子shell执行,而花括号只是将它们分组而不强制子shell。
  • 虽然@GordonDavisson 的评论可能解决了您的问题,但如果只是为了该问题的未来读者,解释您的期望是什么以及该命令实际执行的操作不起作用,这将很有用正如预期的那样。
  • @Fred 所以上面的问题还不够详细?
  • @yalkris 虽然经验丰富的 shell 用户会立即看到在这种情况下出了什么问题并了解您的期望(以及解决方案为何有效),但在您的问题中描述您正在尝试的内容很有用实现(你做了什么),以及你当前的代码具体做了什么。

标签: bash file output


【解决方案1】:

对您的问题的评论可能会解决您的问题,但我想提出另一种解决方法,这对于不熟悉 shell 结构但具有其他编程语言经验的人来说可能更容易理解。

你可以把你的命令放在一个函数中,然后把函数的输出重定向到文件中,像这样:

my_function()
{
  command1 || echo failed
}

my_function > myfile.out

重定向将捕获函数的整个输出。当您有许多命令的输出要一起捕获时,这也很有用,而不是有一堆行重定向到同一个文件。

如果您想同时捕获标准输出和标准错误(通常但不一定用于状态/错误消息),您可以这样做:

my_function > myfile.out 2>&1

在这一行中,2>&1 表示“获取文件描述符 2 (stderr) 的输出并将其发送到文件描述符 1 (stdout) 当前所在的位置”。顺序很重要,因为将此重定向放在第一个之前不会有相同的结果。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多