두 명령의 출력을 하나로 파이프


4

유닉스 / bash에서 두 명령의 출력을 다른 명령으로 파이프하는 것이 가능합니까?

다음 명령을 실행하여 두 명령을 모두 성공적으로 실행했지만 첫 번째 명령은 stdout으로 파이프되고 두 번째 명령은 파이프로 축소되었습니다.

$ grep 40515575 * && zgrep 40515575 * | less

2
명령을 그룹화 할 수 있습니다 { grep 40515575 * && zgrep 40515575 *; } | less.. BTW, 당신이 대신 원하는 것 같습니다 :{ grep 40515575 *; zgrep 40515575 *; } | less
devnull

@devnull edvinas.me의 방법 {};차이점은 무엇입니까? 아니면 같은 것을 말하는 두 가지 다른 방법입니까?
Svish

4
그룹화 명령은 말과 달리 서브 쉘을 작성하지 않습니다 ( command ). 둘째, command1 && command2것을 의미 command2경우에만 실행됩니다 command1반면에 0의 리턴 코드로 종료, command1; command2;두 명령이 실행 될 수 있음을 의미한다.
devnull

답변:


4

대신 이것을 시도하십시오 :

$ ( grep 40515575 * && zgrep 40515575 * ) | less

효과가있는 것 같습니다!
Svish

1
@devnull 솔루션을 선호합니다. { grep 40515575 *; zgrep 40515575 *; } | less서브 쉘을 호출 할 필요가 없기 때문에 항상 grep을 수행합니다 (첫 번째 파일이 파일에서 "40515575"를 찾지 못한 경우에도). 첫 번째 grep이 "false"를 반환하므로 일반 파일이 아닌 압축 파일에만 있으면 "40515575"를 놓치게됩니다.
Olivier Dulac

변경 &&으로 ||는,하지 않을하지만 문제 중 하나를 해결하는 것입니다? 어쨌든, 서브 쉘이 무엇인지 또는 왜 피해야 하는지를 전혀 알지 못합니다 ... : p
Svish

@Svish : 첫 grep 40515575 * && zgrep 40515575 *번째 명령이 zgrep성공한 경우에만 두 번째 명령 ( )을 실행 합니다 (예 : 무언가를 찾음 ). 반면에 grep 40515575 * || zgrep 40515575 *첫 번째 실패 (즉, 아무것도 찾지 못한 경우)에만 두 번째 명령을 실행합니다. 첫 번째 명령의 성공 여부에 관계없이 두 번째 명령을 실행하려면 세미콜론을 사용하십시오.
Gordon Davisson

0

시스템에 따라 'less'는 gzip 및 bzip2 압축 파일과 같은 다양한 유형의 파일을 인식하거나 인식 할 수 있습니다.

아마도 당신이 정말로 말하고 싶은 것은 이것입니다 :

less * | grep 40515575 | less

이 경우 초기 'less'는 출력이 TTY가 아니기 때문에 'cat'처럼 작동한다는 것을 기억하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.