Linux는 결합된 리디렉션을 수행하는 명령에서 작업 순서를 어떻게 결정합니까?

Linux는 결합된 리디렉션을 수행하는 명령에서 작업 순서를 어떻게 결정합니까?

우리가 알고 있듯이 다음 명령의 출력은 less --help | grep -i examine파일로 리디렉션됩니다.더 적은 수의 파일을 확인하세요.BODMAS rule, 리눅스는 수학에서와 유사한 보편적인 연산 순서를 사용합니까 ?

less --help | grep -i examine > examine-files-in-less

답변1

파이프라인과 관련된 모든 명령(예: 문제의 명령)은 (거의) 동시에 시작됩니다.

이는 파이프라인의 명령이 예를 들어 다음과 같다는 것을 의미합니다.

find . ...some other arguments... | sort | uniq -c | sort -nr

모두 병렬로 실행됩니다.

그러나 한 명령의 출력은 다음 명령의 입력이고 명령은 입력이 전달되고 출력이 소비될 때까지 기다리므로 데이터는 파이프라인에서 명령을 동기화합니다.

예를 들어, 위 파이프라인에서 마지막 파이프라인은 실행되지만 sort첫 번째 파이프라인이 모든 출력을 소비할 때까지 많은 작업을 수행하지 않습니다(정렬 작업에는findsort모두사용 가능한 데이터를 읽었습니다).

따라서 데이터는 왼쪽에서 오른쪽으로 정렬되어야 합니다.처리배관으로 완성하였습니다.

list와 같은 다른 복합 명령에서

ls -l; cat somefile

이는 다음과 같습니다.

ls -l
cat somefile

왼쪽에서 오른쪽 순서가 엄격하게 적용됩니다. 완료될 때까지 시작되지 않습니다 cat.ls

복합 명령에서는 다음과 같습니다.

test -f filename || echo 'no such file'

또한 종료 상태가 0으로 반환되면 echo실행되지 않는 엄격한 왼쪽에서 오른쪽 순서도 있습니다.test

예를 들어 "Bash의 부울 테스트 && 및 || 관련 문제" 그리고"논리 연산자 및 세미콜론 우선 순위".

관련 정보