pass stdout as file name for command line util?

前端 未结 5 2090
醉酒成梦
醉酒成梦 2020-11-30 03:23

I\'m working with a command line utility that requires passing the name of a file to write output to, e.g.

foo -o output.txt

The only thing

5条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-30 03:46

    Solution 1: Using process substitution

    The most convenient way of doing this is by using process substitution. In bash the syntax looks as follows:

    foo -o >(other_command)
    

    (Note that this is a bashism. There's similar solutions for other shells, but bottom line is that it's not portable.)

    Solution 2: Using named pipes explicitly

    You can do the above explicitly / manually as follows:

    1. Create a named pipe using the mkfifo command.

      mkfifo my_buf
      
    2. Launch your other command with that file as input

      other_command < my_buf
      
    3. Execute foo and let it write it's output to my_buf

      foo -o my_buf
      

    Solution 3: Using /dev/stdout

    You can also use the device file /dev/stdout as follows

    foo -o /dev/stdout | other_command
    

提交回复
热议问题