2011-12-23 13 views
6

Co to jest konstrukt w bash zwany gdzie można przyjąć wrap polecenie, które wyprowadza do stdout, tak, że dane wyjściowe są traktowane jak strumień? Jeśli nie opisuję tego tak dobrze, być może przykład zrobi najlepiej, i to jest to, czego zwykle używam do: zastosowania diff do wyjścia, które ma nie pochodzić z pliku, ale z innych poleceń, gdzieCo to jest ten konstrukt Bash (i/lub inny shell?)?

cmd 

są pakowane jako

<(cmd) 

owijając polecenia w taki sposób, na przykład poniżej ustalić, że różnica jedna spośród dwóch rozkazów, że jest uruchomiona, a następnie mogę określić tę dokładną różnicę. Jaką konstrukcję/technikę zawijania polecenia nazywa się < (cmd)? Dzięki

[[email protected] v6.5 html]$ git status | egrep modified | awk '{print $3}' | wc -l 
51 
[[email protected] v6.5 html]$ git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define' | wc -l 
50 
[[email protected] v6.5 html]$ diff <(git status | egrep modified | awk '{print $3}') <(git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define') 
39d38 
< javascript/reports/report_initiator.js 

DODATEK Zmieniona komenda za pomocą porad dla używając git LS plik powinien wyglądać następująco (niesprawdzone):

diff <(git ls-files -m) <(git ls-files -m | xargs grep -l 'Ext\.define') 
+5

Nie parsuj 'git status', użyj' git ls-files -m'! – Mat

+0

Dzięki za końcówkę git, pracował jak urok –

+1

To się nazywa obrzydliwość. ;) –

Odpowiedz

6

To się nazywa Process Substitution

+0

Akceptuję drugą odpowiedź, mimo że jesteś identyczny, ponieważ ten użytkownik dał mi również użyteczną wskazówkę git, mam nadzieję, że rozumiesz, zastanawiałem się, jak mam wybierać między dwiema identycznymi jednoczesnymi odpowiedziami –

+0

Cóż, nie do końca symultanicznie, d pobił Mat o około 30 sekund, ale tylko dlatego, że pomagał ci z twoim problemem, a nie z twoim pytaniem. Zgadnij, że to fair. – MattH

+0

Tak, teraz widzę, w końcu mam ekran, na którym odpowiedziałeś 14 minut temu, i Mat 13 minut temu –

1

Jest to proces zastępczy, jak wam powiedziano. Chciałbym tylko podkreślić, że działa to również w innym kierunku. Podstawienie procesu za pomocą> (cmd) pozwala ci na wykonanie polecenia, które zapisuje do pliku, i zamiast tego powoduje, że dane wyjściowe są przekierowywane do wejścia standardowego innego polecenia. Jest to bardzo przydatne do wstawiania czegoś do potoku, który pobiera argument wyjściowy jako argument. Nie widzisz tego tak bardzo, ponieważ prawie wszystkie standardowe polecenia będą już pisać na standardowe wyjście, ale często używam go z niestandardowymi materiałami. Oto przykład:


$ echo "hello world" | tee >(wc) 
hello world 
     1  2  12