2011-12-23 7 views
6

출력 자체가 스트림처럼 취급되도록 stdout으로 출력하는 명령을 감쌀 수있는 bash의 구문은 무엇입니까? 만약 내가 그렇게 잘 설명하지 못한다면, 아마도 가장 좋은 예가 될 것입니다. 그리고 이것은 보통 내가 사용하는 것입니다 : 이 아닌이 파일에서 왔지만 다른 명령에서 diff를 적용하면이 Bash (및/또는 다른 쉘?) 구문은 무엇입니까?

I는 I가 실행하고있는 두 개의 명령 사이의 하나의 차이는 다음 I는 수있다라는 것을 판단 아래
cmd 

이 예에서, 이러한 방식으로 명령을 감싸서

<(cmd) 

로 싸여 하나의 정확한 차이를 결정합니다. 어떤 명령을 < (cmd)로 래핑하는 구성/기술은 무엇입니까? 감사합니다

[[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 

칙 (안된)은 다음과 같이해야 자식의 LS-파일을 사용하기위한 조언을 사용하여 수정 된 명령이 그것은 process substitution라고 Process Substitution

+5

'git status'를 구문 분석하지 마십시오.'git ls-files -m'을 사용하십시오! – Mat

+0

귀뚜라미 팁 주셔서 감사합니다, 매력처럼 근무 –

+1

그것은 가증이라고합니다. ;) –

답변

6

라고

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

.

+0

그 사용자가 나에게 유용한 팁 팁을 주었고, 이해하기를 바랬 기 때문에 나는 똑같은데 다른 대답을 받아 들였습니다. 두 개의 동일한 동시 응답 중에서 어떻게 선택할 것인지 궁금합니다. –

+0

음, d는 매트를 약 30 초 정도 때렸지만, 당신의 질문이 아니라 당신의 문제를 도와주고 있었기 때문입니다. 공정하다고 생각해. – MattH

+0

예 이제 마침내 14 분 전 답변했고 매트는 13 분 전임을 알리는 화면이 있습니다. –

1

이것은 귀하가 들었던 것처럼 프로세스 대체입니다. 나는 이것이 다른 방향으로 작용한다는 것을 지적하고자한다. > (cmd)로 프로세스 대체를 사용하면 파일에 쓰는 명령을 수행하고 그 출력을 다른 명령의 표준 입력으로 리디렉션 할 수 있습니다. 출력 파일 이름을 인수로 취하는 파이프 라인에 무언가를 삽입하는 데 매우 유용합니다. 거의 모든 표준 명령이 stdout에 이미 쓸 것이기 때문에 당신은 그것을 많이 보지 못한다. 그러나 나는 그것을 주문형 물건으로 자주 사용했다. 여기에 고안된 예가 있습니다 :


$ echo "hello world" | tee >(wc) 
hello world 
     1  2  12 
관련 문제