배쉬 더블 파이프

Numan Shafi 2024년2월15일
  1. Bash의 파이프
  2. 단일 파이프와 이중 파이프의 차이점
  3. 결론
배쉬 더블 파이프

이 기사에서는 파이프와 이중 파이프에 대해 충분히 살펴봅니다. Bash 명령 스크립트에서 파이프의 사용법, 표기법 및 영향에 대해 설명합니다.

실생활에서 파이프는 액체나 가스를 한 곳에서 다른 곳으로 운반합니다. 그러나 Bash에서 파이프는 유체를 운반하지 않고 한 명령의 출력을 다음 명령의 입력으로 전달합니다.

Bash의 파이프

파이프는 명령의 출력을 바로 다음 명령의 입력으로 전송하는 리디렉션 연산자입니다. | 기호는 Bash에서 파이프로 사용됩니다.

또한 Linux/UNIX 시스템에서 파이프는 한 명령의 stdout을 다른 명령의 stdin에 연결한다고 말할 수 있습니다.

파이프는 또한 이전 명령의 출력이 다음 명령의 입력이 되는 두 개 이상의 명령을 결합하는 데 사용됩니다. 이것은 파일 사용의 오버헤드를 제거합니다.

일반적으로 파일에서 관련 정보를 추출해야 할 때 먼저 이전 출력을 파일에 저장하고 파일에서 읽어 파일 스트림을 필요한 출력으로 변환합니다.

그러나 파이프에서는 한 명령의 출력이 다른 명령의 입력으로 직접 전달됩니다. 다음은 명령의 기본 표기법을 보여줍니다.

Comand-1 | command-2 | .... | command-N

lsgrep 사이에 파이프 추가

이제 우리는 파이프가 한 명령의 출력을 다음 명령의 입력에 연결하는 예를 볼 것입니다. 이 예에서는 주어진 디렉토리에 있는 파일 묶음에서 이름으로 원하는 파일을 선택합니다.

터미널을 열고 파일이 있는 디렉토리로 이동하여 ls 명령을 작성하십시오. ls -l 명령은 선택한 디렉토리 파일의 세부 정보를 나열합니다.

그러나 우리의 목표는 ls -l의 출력을 선택하고, 파이프를 추가하고, 출력에 필요한 파일만 포함될 수 있도록 특정 파일 이름을 검색하는 것입니다.

코드 다음에 먼저 지정된 디렉토리에 있는 모든 파일의 이름을 나열하십시오.

ls -l

ls 명령의 출력

현재 디렉토리에는 세 개의 파일이 있습니다. 세부 정보는 스크린샷에 표시됩니다. 그러나 bash_double_pipe.md 파일의 세부 정보에 관심이 있습니다.

우리는 파이프를 사용하고 해당 파일을 이름과 함께 grep합니다.

다음 코드는 bash_double_pipe.md의 세부 정보를 보여줍니다.

ls -l | grep "bash_double_pipe.md"

파이프 명령이 있는 ls

파이프를 사용하여 I\O 리디렉션 방지

파이프는 리디렉션 중에 표준 입력 또는 출력을 사용하지 않습니다. 파이프는 주 메모리에서 구현됩니다.

다음 예는 파이프가 있거나 없는 스트림 리디렉션을 보여줍니다.

파이프 없는 I\O 리디렉션

ls -l > temp

more < temp

위에 주어진 코드는 ls -l의 출력을 temp 파일로 리디렉션한 다음 temp 파일의 내용을 화면에 표시합니다. 다음 스크린샷은 위 실행 코드의 출력을 보여줍니다.

io 리디렉션

이제 파이프의 표준 입력 또는 출력을 사용하지 않고 IO 리디렉션을 살펴보겠습니다. 위의 예는 첫 번째 명령의 출력을 두 번째 명령의 입력으로 리디렉션합니다.

다음 코드는 동일한 IO 리디렉션 작업을 제공하지만 파이프를 사용합니다.

ls -l | more

위의 코드는 디스크 IO 없이 동일한 리디렉션 작업을 수행합니다. 다음 스크린샷은 위 실행 명령의 결과를 보여줍니다.

bash를 사용한 io 리디렉션

위의 스크린샷은 디스크 IO 없이 파이프를 사용하여 리디렉션을 수행할 수 있음을 보여줍니다.

cat, grep, teewc 명령에서 파이프 사용

파이프는 cat, grep, teewc 명령에서도 매우 유용합니다. 파일에서 레코드가 몇 번 발생하는지 확인하고 싶다고 가정해 보겠습니다.

그런 다음 많은 변수를 만드는 대신 이러한 명령 사이에 파이프를 사용하여 필요한 출력을 가져와야 합니다.

다음 코드는 파이프와 함께 cat, grep, teewc 명령의 사용법을 보여줍니다.

cat abc.txt | grep "temp" | tee file2.txt | wc -l

cat 명령은 abc.txt의 모든 내용을 전달하고 grep 명령으로 전달합니다. grep 명령은 temp와 일치하는 문자열이 있는 행만 선택합니다.

그런 다음 temp 문자열을 포함하는 행이 tee 명령으로 전달되어 출력을 file2.txt에 기록합니다.

그런 다음 이 출력은 wc 명령으로 전달되어 레코드 수를 계산합니다. file2.txt에는 세 개의 행이 있습니다. 위 명령의 출력은 3입니다.

cat grep 파이프

기사를 요약하면 파이프는 한 명령의 출력을 다음 명령의 입력으로 전송하는 데 매우 유용합니다.

단일 파이프와 이중 파이프의 차이점

단일 파이프 | 한 명령의 출력을 다음 명령의 입력으로 보내지만 이중 파이프 || 단일 파이프와 유사하지 않습니다. 이중 파이프는 OR 연산자를 나타내며 일반적으로 조건문에 사용됩니다.

OR 연산자의 구문 및 단락 평가

다음 코드는 이중 파이프의 기본 표기법을 보여줍니다.

command-1 || command-2

위의 코드는 ||의 기본 표기법과 사용법을 보여줍니다. 운영자. Bash는 단락 평가를 지원합니다.

단락 평가는 조건에 대한 평가가 중지되고 명확해진 직후 최종 결정을 반환하는 것을 의미합니다. 예를 들어 OR 연산자와 결합된 여러 표현식이 있는 복합 조건은 표현식 중 하나가 true로 판명되는 즉시 중지됩니다.

결과가 더 이상 최종 결정에 영향을 미치지 않으므로 다른 표현식을 더 이상 평가하지 않습니다.

따라서 Bash 인터프리터는 위의 Bash 스크립트에서 첫 번째 명령을 실행하려고 시도합니다. 첫 번째 명령이 성공적으로 실행되면 command-2가 실행되지 않습니다.

두 번째 명령은 첫 번째 명령이 성공적으로 실행되지 않는 경우에만 실행됩니다.

이중 파이프의 예를 살펴보겠습니다.

ls -a || echo "hello world"

위의 스크립트에서 command-1에 현재 디렉토리의 요소를 나열합니다. command-2에서 hello world 메시지를 인쇄합니다.

이 두 명령 사이에 이중 파이프를 사용했습니다. 위 명령을 실행할 때 command-1은 현재 디렉토리의 요소를 성공적으로 나열하므로 command-2는 무시됩니다.

이제 command-1이 성공적으로 실행되지 않는 시나리오를 살펴보겠습니다.

ls a || echo "hello world"

위의 명령은 두 번째 명령이 실행되는 시나리오를 보여줍니다. 첫 번째 명령에서 a 플래그 앞에 하이픈(-)을 사용하지 않았습니다. 따라서 이 명령은 성공적으로 실행되지 않습니다.

따라서 OR 연산자는 hello world 메시지를 인쇄하는 echo 명령을 실행합니다.

다음 스크린샷은 위의 두 명령의 출력을 보여줍니다.

이중 파이프

위의 아이디어는 여러 명령을 연결하는 것으로 확장될 수 있습니다. 예를 들어 다음 스크립트는 ||로 4개의 명령을 연결합니다. 연산자이고 평가는 왼쪽에서 오른쪽으로 시작됩니다.

명령이 성공적으로 실행되면 오른쪽의 나머지 명령은 모두 건너뜁니다.

Command-1 || Command-2 || Command-3 || command-4

결론

이 기사에서는 단일 및 이중 파이프 기호와 그 기능에 대해 설명했습니다. 단일 파이프 기호는 한 명령의 출력을 다른 명령의 입력으로 보내는 Linux 파이프를 나타냅니다.

반면 이중 파이프 기호는 논리 OR 연산자이며 논리 연산에 도움이 됩니다.