Redirecting bash stdout/stderr to two places?

前端 未结 3 425
误落风尘
误落风尘 2021-01-30 10:35

This one\'s been bugging me for a while now. Is it possible to redirect stdout and stderr to both the terminal output and to a program?

<
相关标签:
3条回答
  • 2021-01-30 11:21

    I don't actually know whether TextMate can take a file to edit as its standard input, that seems a little bizarre. I suspect you would want to send the stdout/stderr to a file and edit it there, in which case you need:

    progname 2>&1 | tee tempfile ; textmate tempfile
    

    The 2>&1 redirects stderr (file handle 2) to go to the same place as stdout (file handle 1) so that both of them end up in a single stream. The tee command then writes that to tempfile as well as stdout.

    Then, once the process has finished, the editor is called up on the temporary file.

    If it can accept standard input for editing, use:

    progname 2>&1 | tee /dev/tty | textmate
    
    0 讨论(0)
  • 2021-01-30 11:38

    You can use a named pipe, which is intended for exactly the situation you describe.

    mkfifo some_pipe
    command_that_writes_to_stdout | tee some_pipe \
      & command_that_reads_from_stdin < some_pipe
    rm some_pipe
    

    Or, in Bash:

    command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)
    
    0 讨论(0)
  • 2021-01-30 11:38

    Is it possible to redirect stdout and stderr to both the terminal output and to a program?

    I'm not sure how useful it is to combine stdout and stderr on the input to an editor, but does omething like this do what you need?

    input_prog 2>&1 | tee /dev/tty | my_editor
    
    0 讨论(0)
提交回复
热议问题