Hogyan változtathatom meg a két parancs kimenetét?

133

El tudtam képzelni, hogy a két hasonló könyvtár tartalmának összehasonlítása a legegyszerűbb mód a

diff 'ls old' 'ls new'

De látom, miért nem működik; A (z)diff fájlok nagy hosszú listát adnak a parancssorban, nem pedig két olyan streamet, amilyen reménykedtem. Hogyan tudom átadni a két kimenetet diff-nak közvetlenül?

    
készlet Ternary 15.12.2012 23:01
forrás

3 válasz

194

Parancs helyettesítés'…' helyettesíti a parancs kimenetét a parancssorba, így adiff mindkét könyvtárban található fájlok listáját argumentumként tekintheti meg. Adiff -ra a következő két fájlnevet kell látnia a parancssorban: ezeknek a fájloknak a tartalma a címtárlisták. Ez az, amit a folyamat helyettesítés tesz.

diff <(ls old) <(ls new)

Adiff argumentumai a/dev/fd/3 és a/dev/fd/4 -ként fognak megjelenni: a bash által létrehozott két csőnek megfelelő fájlleíró. Amikor adiff megnyitja ezeket a fájlokat, akkor minden cső olvasható oldalához csatlakozik. Az egyes csövek írási oldala als parancshoz van kapcsolva.

    
válasz adott Gilles 15.12.2012 23:06
forrás
2

Halhéj

A Fish shell-ban be kell csípni psub -t. Itt van egy példa a heroku és a dokku konfigurációra a Összehasonlításon kívül :

bcompare (ssh me@myapp.pl dokku config myapp | sort | psub) (heroku config -a myapp | sort | psub)
    
válasz adott WooYek 12.04.2018 09:34
forrás
2

A zsh esetében a=(command) használata% s automatikusan létrehoz egy ideiglenes fájlt, és helyettesíti a=(command) -ot a fájl elérési útjával. A Command Substitution paranccsal a$(command) helyett a parancs kimenete .

Tehát három lehetőség van:

  1. Parancshelyettesítés:$(...)
  2. Feldolgozás helyettesítés:<(...)
  3. zsh-ízesített folyamat helyettesítés:=(...)

A zsh ízesített feldolgozási szubsztitúció, # 3, nagyon hasznos, és hasonlóképpen hasonlítható össze két parancs kimenetével, például egy diff eszköz használatával, például összehasonlításon túl:

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

A Összehasonlításon túl, vegye figyelembe, hogybcomp -ot kell használni a fentiekhez (bcompare), mivelbcomp elindítja az összehasonlítást, és várakozik . Habcompare -ot használ, akkor az összehasonlítást elindítja és azonnal kilép, ami miatt a parancs kimenetének létrehozásához létrehozott ideiglenes fájlok eltűnnek.

További információ itt: link

Vegye figyelembe ezt is:

  

Vegye figyelembe, hogy a héj létrehoz egy ideiglenes fájlt, és törli, amikor a parancs kész.

és a következő, amely a zsh (azaz 2 és # 3) által támogatott folyamatcsere-típusok közötti különbség:

  

Ha elolvassa a zsh man oldalát, észreveheti, hogy a < (...) a folyamat helyettesítés egy másik formája, amely hasonló a = (...) -hez. Fontos különbség van a kettő között. A < (...) esetben a shell létrehoz egy nevű csövet (FIFO) a fájl helyett. Ez jobb, mivel nem tölti fel a fájlrendszert; de nem minden esetben működik. Valójában, ha a fenti példákkal helyettesítjük (=) a (<) -t, akkor mindegyik leállna, kivéve a fgrep -f <...> -t. Nem tudsz szerkeszteni egy pipát, vagy megnyitni azt levél mappaként; Az fgrep azonban nem okoz problémát a csövekből származó szavak listájának olvasásával. Lehet, hogy vajon miért nem működik a diff < (foo) bár, mivel foo | diff-bar művek; ez azért van, mert a diff létrehoz egy ideiglenes fájlt, ha észreveszi, hogy az egyik argumentuma a -, majd átmásolja a szabványos bemenetet az ideiglenes fájlba.

Referencia: link

    
válasz adott Ashutosh Jindal 29.06.2018 10:59
forrás