파일을 출력하는 전처리 명령이 있습니다.
./preprocess.sh > preprocessed_file
preprocessed_file
이렇게 사용될 것이다
while read line
do
./research.sh $line &
done < preprocessed_file
rm -f preprocessed_file
while read line
preprocessed_file로 출력하는 대신 해당 섹션으로 직접 출력하는 방법이 있습니까 ? 나는 이 임시 직원을 사용하는 것보다 더 좋은 방법이 있어야 한다고 생각합니다 preprocessed_file
.
답변1
예! 프로세스 파이프라인을 사용할 수 있습니다 |
.
./preprocess.sh |
while IFS= read -r line
do
./research.sh "$line" &
done
프로세스 파이프는 한 프로세스의 표준 출력( )을 다음 프로세스의 stdout
표준 입력( ) 으로 전달합니다.stdin
선택적으로 a 뒤에 개행 문자를 배치 |
하고 명령을 다음 행으로 확장할 수 있습니다.
참고: a|b
동일 b < <(a)
하지만 매직 파일이 없고 특히 파이프가 길어질 때 순서를 더 쉽게 읽을 수 있습니다.
a|b|c
동등하다c < <(b < <(a))
그리고
a|b|c|d|e
예e < < (d < <(c < <(b < <(a))))
답변2
배쉬를 사용할 수 있습니다프로세스 교체:
while IFS= read -r line; do
./research.sh "$line" &
done < <(./preprocess.sh)
프로세스 대체의 장점:
- 임시 파일을 저장할 필요가 없습니다.
- 더 나은 성능. 다른 프로세스에서 읽는 것이 일반적으로 디스크에 쓴 다음 다시 읽는 것보다 빠릅니다.
- 매개변수와 변수 확장의 동시 실행, 명령 대체 및 연산 확장으로 인한 계산 시간 절약