Diff output from two programs without temporary files

后端 未结 6 933
梦谈多话
梦谈多话 2021-01-29 18:13

Say I have too programs a and b that I can run with ./a and ./b.

Is it possible to diff their outputs without first w

6条回答
  •  走了就别回头了
    2021-01-29 18:56

    For zsh, using =(command) automatically creates a temporary file and replaces =(command) with the path of the file itself. With normal Process Substitution, $(command) is replaced with the output of the command.

    This zsh feature is very useful and can be used like so to compare the output of two commands using a diff tool, for example Beyond Compare:

    bcomp  =(ulimit -Sa | sort) =(ulimit -Ha | sort)
    

    For Beyond Compare, note that you must use bcomp for the above (instead of bcompare) since bcomp launches the comparison and waits for it to complete. If you use bcompare, that launches comparison and immediately exits due to which the temporary files created to store the output of the commands disappear.

    Read more here: http://zsh.sourceforge.net/Intro/intro_7.html

    Also notice this:

    Note that the shell creates a temporary file, and deletes it when the command is finished.

    and the following which is the difference between $(...) and =(...) :

    If you read zsh's man page, you may notice that <(...) is another form of process substitution which is similar to =(...). There is an important difference between the two. In the <(...) case, the shell creates a named pipe (FIFO) instead of a file. This is better, since it does not fill up the file system; but it does not work in all cases. In fact, if we had replaced =(...) with <(...) in the examples above, all of them would have stopped working except for fgrep -f <(...). You can not edit a pipe, or open it as a mail folder; fgrep, however, has no problem with reading a list of words from a pipe. You may wonder why diff <(foo) bar doesn't work, since foo | diff - bar works; this is because diff creates a temporary file if it notices that one of its arguments is -, and then copies its standard input to the temporary file.

提交回复
热议问题