Jak mohu rozlišit výstup dvou příkazů?

133

Představoval jsem si, že nejjednodušší způsob porovnání obsahu dvou podobných adresářů by byl něco jako

diff 'ls old' 'ls new'

Ale já vidím, proč to nefunguje; diff je předán velký dlouhý seznam souborů na příkazovém řádku, spíše než dva streamy, jak jsem doufal. Jak mohu předat dva výstupy přímo na diff?

    
dané Ternary 15.12.2012 23:01

3 odpovědi

194

Nahrazení příkazu'…' nahrazuje výstup příkazu do příkazového řádku, takžediff vidí seznam souborů v obou adresářích jako argumenty. Co chcete, je prodiff vidět dva názvy souborů na jeho příkazovém řádku a obsah těchto souborů mají být seznamy adresářů. To dělá nahrazení procesu .

diff <(ls old) <(ls new)

Argumenty prodiff budou vypadat jako/dev/fd/3 a/dev/fd/4: jsou deskriptory souborů odpovídající dvěma trubkám vytvořeným bash. Kdyždiff otevírá tyto soubory, bude připojen k čtecí straně každé trubky. Napájecí strana každé trubky je připojena k příkazuls.

    
odpověděl Gilles 15.12.2012 23:06
2

Fish shell

Ve schránce pro ryby je třeba vložit psub . Zde je příklad porovnání heroku a dokku config s Beyond Compare :

bcompare (ssh me@myapp.pl dokku config myapp | sort | psub) (heroku config -a myapp | sort | psub)
    
odpověděl WooYek 12.04.2018 09:34
2

Pro zsh, pomocí=(command) automaticky vytvoří dočasný soubor a nahradí=(command) cestou samotného souboru. Při nahrazení příkazem je$(command) nahrazen příkazem výstup příkazu.

Existují tedy tři možnosti:

  1. Nahrazení příkazu:$(...)
  2. Proces nahrazení:<(...)
  3. zsh-ochucený proces nahrazení:=(...)

Zachystalovaná procesní substituce # 3 je velmi užitečná a může být použita tak, aby bylo možné porovnat výstup dvou příkazů pomocí nástroje diff, například Beyond Compare:

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

Pokud chcete porovnávat, bere na vědomí, že musíte použítbcomp pro výše uvedené (namístobcompare), protožebcomp spustí porovnání a čeká . Použijete-libcompare, spustí se porovnání a okamžitě se ukončí kvůli tomu zmizí dočasné soubory vytvořené pro uložení výstupu příkazů.

Přečtěte si více zde: Odkaz

Také si všimněte následující:

  

Všimněte si, že shell vytvoří dočasný soubor a odstraní jej po dokončení příkazu.

a následující, což je rozdíl mezi dvěma typy nahrazení procesu podporovaných zsh (tj. # 2 a # 3):

  

Pokud čtete stránku mana zsh, můžete si všimnout, že < (...) je další forma nahrazení procesu, která je podobná = (...). Mezi těmito dvěma je důležitý rozdíl. V případě

Odkaz: Odkaz

    
odpověděl Ashutosh Jindal 29.06.2018 10:59