bash“;命令1“回声失败”;写入同一文件

bash“;命令1“回声失败”;写入同一文件,bash,file,output,Bash,File,Output,如何将命令输出或“失败”写入同一文件?我正在尝试的是下面这样的东西 command1 || echo failed > myfile.out 上述命令无法按预期工作。它总是打印失败,因为输出到myfile。对您的问题的注释可能会解决您的问题,但我想提出另一种方法,对于不熟悉shell结构但有其他编程语言经验的人来说,这可能更容易理解 您可以将命令放入函数中,然后将函数的输出重定向到文件,如下所示: my_function() { command1 || echo failed }

如何将命令输出或“失败”写入同一文件?我正在尝试的是下面这样的东西

command1 || echo failed > myfile.out

上述命令无法按预期工作。它总是打印失败,因为输出到myfile。对您的问题的注释可能会解决您的问题,但我想提出另一种方法,对于不熟悉shell结构但有其他编程语言经验的人来说,这可能更容易理解

您可以将命令放入函数中,然后将函数的输出重定向到文件,如下所示:

my_function()
{
  command1 || echo failed
}

my_function > myfile.out
重定向将捕获函数的整个输出。如果有许多命令的输出要一起捕获,而不是有一堆行重定向到同一个文件,那么这也很有用

如果您希望捕获标准输出和标准错误(通常但不一定用于状态/错误消息),可以执行以下操作:

my_function > myfile.out 2>&1

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

您可以尝试“(command1 | echo failed)>myfile.out”或
{command1 | echo failed;}>myfile.out
——括号强制子shell执行命令,而花括号只是将它们分组,而不强制使用子shell。虽然@GordonDavisson的评论可能解决了您的问题,但如果只是对该问题的未来读者来说,解释您的期望是什么将是有用的,命令实际执行的操作与预期不符。@弗雷德,那么上面的问题还不够详细?@yalkris虽然有经验的shell用户会立即看到这种情况下的错误,并理解您的期望(以及解决方案为何有效),但在您的问题中描述您试图实现的目标是很有用的(您确实这么做了),以及您当前的代码具体做了什么。