Pipe multiple commands into a single command

后端 未结 3 1061
北海茫月
北海茫月 2020-12-02 15:00

How can I pipe the stdout of multiple commands to a single command?

Example 1: combine and sort the output of all three echo commands:

echo zzz; ec         


        
相关标签:
3条回答
  • 2020-12-02 15:48

    In Windows it would be as follow: (echo zzz & echo aaa & echo kkk) | sort

    Or if it is inside a batch file it can be mono line (like sample) as well as multiline:

    (
     echo zzz
     echo aaa
     echo kkk
    ) | sort
    

    Note: The original post does not mention it is only for Linux, so I added the solution for Windows command line... it is very useful when working with VHD/VHDX with diskpart inside scripts (echo diskpart_command) instead of the echo on the same, but let there the echo, there is also another way without echos and with > redirector, but it is very prone to errors and much more complex to write (why use a complicated prone to errors way if exists a simple way that allways work well)... also remember %d% gives you the actual path (very useful for not hardcoding the path of VHD/VHDX files).

    0 讨论(0)
  • 2020-12-02 15:49

    You can use {} for this and eliminate the need for a sub-shell as in (list), like so:

    { echo zzz; echo aaa; echo kkk; } | sort
    

    We do need a whitespace character after { and before }. We also need the last ; when the sequence is written on a single line.

    We could also write it on multiple lines without the need for any ;:

    Example 1:

    {
      echo zzz
      echo aaa
      echo kkk
    } | sort
    

    Example 2:

    {
      setopt
      unsetopt
      set
    } | sort
    
    0 讨论(0)
  • 2020-12-02 16:01

    Use parentheses ()'s to combine the commands into a single process, which will concatenate the stdout of each of them.

    Example 1 (note that $ is the shell prompt):

    $ (echo zzz; echo aaa; echo kkk) | sort
    aaa
    kkk
    zzz
    


    Example 2:

    (setopt; unsetopt; set) | sort
    
    0 讨论(0)
提交回复
热议问题