jak używać standardowego wyjścia z wielu poleceń jako argumentów pliku

0

Chcę porównać dane wyjściowe 2 poleceń.

Na przykład:

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

Czy jest na to sprytny sposób? Mam nadzieję, że w jednym wierszu i bez potrzeby tworzenia plików tymczasowych.

Byłoby to coś takiego (ale oczywiście nie do końca tak):

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

Informacje o mojej maszynie to:

$ 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
źródło

Odpowiedzi:

0

W bash możesz użyć podstawienia procesu:

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

Zauważ, że to nie zadziała w zwykłym sh (lub nawet bash w „trybie posix”, tj. Gdy zostanie wywołany pod nazwą „sh” i wyłączy niektóre funkcje dla kompatybilności). Jest on jednak dostępny w Zsh.

Gordon Davisson
źródło
Co masz na myśli bash in plain-sh emulation mode?
Kevin Fegan
@KevinFegan: W niektórych systemach / bin / sh to tak naprawdę bash (link lub kopia / bin / bash); jeśli zostanie uruchomiony z tą nazwą, bash wejdzie w „tryb posiksowy” (tak zwany tryb emulacji zwykłego) i wyłącza wiele jego zaawansowanych (i niestandardowych) funkcji. Ten tryb można również wywołać, uruchamiając bash z --posixopcją lub poleceniem set -o posix. Zmienię swoją odpowiedź, aby wyjaśnić ...
Gordon Davisson