Find the answer to your Linux question:
Results 1 to 2 of 2
Here I am proposing to the entire Linux community that OS designer might consider doing this: the stdio's pipe operator '|' should work the same as '>', and should support ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Just Joined!
    Join Date
    Jul 2010
    Posts
    14

    Smile Proposal for multi-redirecting stdout & stderr to different programs


    Here I am proposing to the entire Linux community that OS designer might consider doing this:
    the stdio's pipe operator '|' should work the same as '>', and should support multi-pipe,

    for example,
    MyProgramA 1>A_stdout.txt 2>A_stderr.txt 1>A_stdout2.txt 2>B_stderr2.txt 1|MyProgramB 1|MyProgramC 2|MyProgramD

    the standard output from MyProgramA is written into 2 files A_stdout.txt and A_stdout2.txt , in addition, it's piped into MyProgramB and MyProgramC, its error output is piped into MyProgramD

    However, one problem of this design is that if there are multiple '|'s, there'll be ambiguity on the 2nd and subsequent '|'s, i.e. do you want to pipe the stdout/err from the 1st program or the 2nd program? Maybe we can bracket them i.e.
    MyProgramA 1|(MyProgramB 1>B.stdout 2>B.stderr) 2|(MyProgramC 1>C.stdout 2>C.stderr)

    In fact, multi-pipe is not required if we use the command 'tee',
    but is simpler, because instead of writing:
    MyProgram | tee file1 | tee file2 | tee file3 >file4
    we can write:
    MyProgram 1>file1 1>file2 1>file3 1>file4

    What do you guys think?

    Wang Xuancong

  2. #2
    Linux Enthusiast
    Join Date
    Jan 2005
    Location
    Saint Paul, MN
    Posts
    668
    Quote Originally Posted by xuancong View Post
    Here I am proposing to the entire Linux community that OS designer might consider doing this:
    the stdio's pipe operator '|' should work the same as '>', and should support multi-pipe,

    for example,
    MyProgramA 1>A_stdout.txt 2>A_stderr.txt 1>A_stdout2.txt 2>B_stderr2.txt 1|MyProgramB 1|MyProgramC 2|MyProgramD

    the standard output from MyProgramA is written into 2 files A_stdout.txt and A_stdout2.txt , in addition, it's piped into MyProgramB and MyProgramC, its error output is piped into MyProgramD

    However, one problem of this design is that if there are multiple '|'s, there'll be ambiguity on the 2nd and subsequent '|'s, i.e. do you want to pipe the stdout/err from the 1st program or the 2nd program? Maybe we can bracket them i.e.
    MyProgramA 1|(MyProgramB 1>B.stdout 2>B.stderr) 2|(MyProgramC 1>C.stdout 2>C.stderr)

    In fact, multi-pipe is not required if we use the command 'tee',
    but is simpler, because instead of writing:
    MyProgram | tee file1 | tee file2 | tee file3 >file4
    we can write:
    MyProgram 1>file1 1>file2 1>file3 1>file4

    What do you guys think?

    Wang Xuancong
    The piping both "|" and ">" have been part of UNIT since 1973. As such there is too much written that the definitions will not be changing.

    The idea dates back to the latter half of the 1950s and was irst suggested by M. Doug McIlroy (Bell Labs). See their history page at: The Creation of the UNIX* Operating System: Connecting streams like a garden hose

    You might want to look at the commands "tee" and "exec" as well.

    For some really weird "redirection" usage you can look in the "FAQ --- Csh Programming Considered Harmful" at http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ where they are showing missing stuff in the "C shell" (csh or tcsh).


    Unix started in 1969 and Linux is build with the Unix tool set and the kernel layer is Linux. So the design has many decades of use prior to some one just finding it.
    Last edited by alf55; 11-13-2012 at 04:21 AM. Reason: Added comment about Csh Programming Considered Harmful

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •