일반적으로 다음과 같이 작성합니다.
diff file1 file2
하지만 파일을 명령의 출력과 비교하고 싶습니다(여기서는 명령을 간단하게 만듭니다).
diff file1 <(cat file2 | sort)
좋아, 쉘 프롬프트에서 이것을 수동으로 입력하면 작동하지만 쉘 스크립트에 똑같은 줄을 넣은 다음 스크립트를 실행하면 오류가 발생합니다.
그래서 질문은 – 이것을 올바르게 수행하는 방법은 무엇입니까?
물론 출력을 임시 파일에 쓰는 것을 피하고 싶습니다.
답변1
귀하의 스크립트와 쉘이 다른 것 같습니다. 어쩌면 #!/bin/sh
스크립트 상단에 인터프리터로 가지고 있지만 bash
개인 쉘로 사용하고 있을 수도 있습니다. 를 실행하여 터미널에서 실행 중인 쉘을 확인할 수 있습니다 echo $SHELL
.
이를 수행하는 더 쉬운 방법(대부분의 쉘에서 작동함)은 제공한 파일 읽기 연산자 대신 파이프 리디렉션을 사용하는 것입니다. "-" 기호는 STDIN을 읽는 표준 명명법이며 종종 매개변수 목록의 파일 이름을 대체하는 데 사용될 수 있습니다.
cat file2 | sort | diff file1 -
아니면 피하기 위해고양이의 쓸모없는 사용:
sort < file2 | diff file1 -
답변2
표준 입력의 범위는 스크립트 자체이므로 다음과 같이 코드를 블록에 넣으십시오.
{
diff file1 <(sort file2)
}
이렇게 하면 STDIN의 범위가 블록 내에 있습니다.
나는 그것을 시도했고 작동합니다.