cara menggunakan output standar dari banyak perintah sebagai argumen file

0

Saya ingin membandingkan output dari 2 perintah.

Sebagai contoh:

$ command1 arguments1 > tempfile1
$ command2 arguments2 > tempfile2
$ diff tempfile1 tempfile2 > savefile
$ rm tempfile1 tempfile2

Apakah ada cara cerdas untuk melakukan ini? Semoga dalam satu baris, dan tanpa perlu file sementara.

Jadi, itu akan menjadi sesuatu seperti (tapi jelas bukan ini):

$ diff $(command1 arguments1) $(command2 arguments2) > savefile

Info mesin saya adalah:

$ uname -a
Linux host.name 3.2.54 #9 SMP Thu Feb 13 08:17:11 CST 2014 x86_64 GNU/Linux

$ which sh
/bin/sh
Kevin Fegan
sumber

Jawaban:

0

Dalam bash, Anda dapat menggunakan subtitusi proses:

diff <(command1 arguments1) <(command2 arguments2) > savefile

Perhatikan bahwa ini tidak akan berfungsi di sh polos (atau bahkan bash di "mode posix", yaitu ketika dipanggil dengan nama "sh" dan itu mematikan beberapa fitur untuk kompatibilitas). Ini tersedia dalam format zsh.

Gordon Davisson
sumber
Apa maksudmu bash in plain-sh emulation mode?
Kevin Fegan
@KevinFegan: Pada beberapa sistem, / bin / sh sebenarnya adalah bash (baik tautan atau salinan / bin / bash); jika dijalankan dengan nama ini, bash memasuki "mode posix" (apa yang saya sebut mode emulasi plain-sh), dan mematikan sejumlah fitur canggih (dan tidak standar). Mode ini juga dapat dipanggil dengan menjalankan bash dengan --posixopsi, atau dengan perintah set -o posix. Saya akan mengedit jawaban saya untuk mengklarifikasi ...
Gordon Davisson