Bash&&-ed命令列表输出重定向到标准输出

Bash&&-ed命令列表输出重定向到标准输出,bash,list,shell,command,Bash,List,Shell,Command,我主要的Bash知识来源是infobash。它的重定向和命令列表部分都没有详细说明命令列表如何处理重定向命令输出。在本例中,它是命令列表:command1&&command2&&command3。 需要的是将所有3个命令的输出重定向到文件。 对于这里使用的Bash,以下两种工作都不适用(在正在进行的文件重定向中只能找到command3输出) 几乎没有进一步的试验,没有任何帮助 在哪里指定了这个Bash方面 为什么我的命令字符串不能产生描述的结果 如何修复它?重定向多个命令的常用方法是使用组{…;

我主要的Bash知识来源是
infobash
。它的
重定向
命令
列表
部分都没有详细说明命令列表如何处理重定向命令输出。在本例中,它是命令列表:
command1&&command2&&command3
。 需要的是将所有3个命令的输出重定向到文件。 对于这里使用的Bash,以下两种工作都不适用(在正在进行的文件重定向中只能找到command3输出)

几乎没有进一步的试验,没有任何帮助

在哪里指定了这个Bash方面

为什么我的命令字符串不能产生描述的结果


如何修复它?

重定向多个命令的常用方法是使用组
{…;}
。注意
最后,它很重要

{ cmd1 && cmd2 && cmd3; } > file
但是,您说您已经尝试了
(cmd1&&cmd1&&cmd3)>文件
,该文件也应该可以工作。也许您的一些命令会打印到stderr而不是stdout。在这种情况下,使用
{…;}&>文件
将stderr和stdout写入该文件

为什么其他命令不起作用? 除了stdout/stderr问题外,以下是其他命令不适用于您的原因解释:

  • cmd1&&cmd2&&cmd3>文件
    仅重定向
    cmd3

  • cmd1>文件和&cmd2>文件和&cmd3>文件
    覆盖
    文件
    两次。
    cmd1
    的输出丢失,因为
    cmd2
    会覆盖它。
    cmd2
    的输出丢失,因为
    cmd3
    覆盖了它。使用
    cmd1>文件&&cmd2>>文件&&cmd3>>文件
    附加到文件,而不是覆盖
  • cmd1 | tee文件和&cmd2 | tee文件和&cmd3 | tee文件
    同上
    tee
    覆盖文件。使用
    tee-a
    进行追加

    • 重定向多个命令的常用方法是使用组
      {…;}
      。注意
      最后,它很重要

      { cmd1 && cmd2 && cmd3; } > file
      
      但是,您说您已经尝试了
      (cmd1&&cmd1&&cmd3)>文件
      ,该文件也应该可以工作。也许您的一些命令会打印到stderr而不是stdout。在这种情况下,使用
      {…;}&>文件
      将stderr和stdout写入该文件

      为什么其他命令不起作用? 除了stdout/stderr问题外,以下是其他命令不适用于您的原因解释:

      • cmd1&&cmd2&&cmd3>文件
        仅重定向
        cmd3

      • cmd1>文件和&cmd2>文件和&cmd3>文件
        覆盖
        文件
        两次。
        cmd1
        的输出丢失,因为
        cmd2
        会覆盖它。
        cmd2
        的输出丢失,因为
        cmd3
        覆盖了它。使用
        cmd1>文件&&cmd2>>文件&&cmd3>>文件
        附加到文件,而不是覆盖
      • cmd1 | tee文件和&cmd2 | tee文件和&cmd3 | tee文件
        同上
        tee
        覆盖文件。使用
        tee-a
        进行追加

      (command1&&command2&&command3)>mycommandoutput.txt
      工作正常。感谢您的提示。这似乎是我自己在语法上的错误:每个大括号字符都需要通过空格与剩余的toke分隔开来-再次根据
      info Bash
      (command1&&command2&&command3)>mycommandoutput.txt
      工作正常。感谢您的提示。这似乎是我自己在语法上的错误:每个大括号字符都需要通过空格与剩余的toke分隔开来-再次根据
      info Bash
      cmd1>文件和&cmd2>文件和&cmd3>>文件
      `使用tee-a进行追加。`-怪我,这样一个基本的被遗忘。
      cmd1>文件&&cmd2>>文件&&cmd3>>文件
      `使用tee-a进行追加。`-我该负责,这样一个基本的被遗忘。