명령 출력에서 ​​줄을 읽을 수 있는 방법이 있습니까?

명령 출력에서 ​​줄을 읽을 수 있는 방법이 있습니까?

파일을 출력하는 전처리 명령이 있습니다.

./preprocess.sh > preprocessed_file 

preprocessed_file이렇게 사용될 것이다

while read line
do

    ./research.sh $line &

done < preprocessed_file 

rm -f preprocessed_file

while read linepreprocessed_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|ee < < (d < <(c < <(b < <(a))))

답변2

배쉬를 사용할 수 있습니다프로세스 교체:

while IFS= read -r line; do
  ./research.sh "$line" &
done < <(./preprocess.sh)

프로세스 대체의 장점:

  • 임시 파일을 저장할 필요가 없습니다.
  • 더 나은 성능. 다른 프로세스에서 읽는 것이 일반적으로 디스크에 쓴 다음 다시 읽는 것보다 빠릅니다.
  • 매개변수와 변수 확장의 동시 실행, 명령 대체 및 연산 확장으로 인한 계산 시간 절약

관련 정보