이유를 알고 싶어요
ls -1 |
while read file; do
echo $file; tail -n 100 $file > >(sleep 1 && cat > $file)
done
비교하다
ls -1 |
while read file; do
echo $file; tail -n 100 $file | (sleep 1 && cat > $file)
done
?
디렉토리에 100개의 파일이 있는 경우:
- 두 번째 명령을 처리하는 데 거의 100초가 걸립니다.
- 첫 번째 명령은 거의 즉시 처리됩니다.
답변1
파이프를 사용할 때 쉘은 파이프의 각 명령을 동시에 실행하고 다음 명령을 실행하기 전에 모든 명령이 완료될 때까지 기다립니다. 이것은문서:
파이프라인이 비동기식으로 실행되지 않는 경우(참조목록), 쉘은 파이프라인의 모든 명령이 완료될 때까지 기다립니다.
위에서 파이프라인의 비동기 실행을 언급할 때 이는 전체 파이프라인을 백그라운드에서 실행하는 것을 의미합니다 &
.
프로세스 대체를 사용하면 쉘은 프로세스가 완료될 때까지 기다리지 않습니다. 이것문서그냥 말해:
프로세스목록입력 또는 출력이 파일 이름으로 표시되어 비동기식으로 실행됩니다.