화면에서 일부 결과를 script
읽고 stdin
뱉어내는 이라는 스크립트가 있다고 가정 해 봅시다 .
한 파일의 내용을 제공하려면 다음을 입력했을 것입니다.
$ ./script < file1.txt
그러나 여러 파일의 내용을 동일한 방식으로 스크립트에 공급하려면 어떻게해야합니까? 내가 지금까지 생각해 낸 최선은 다음과 같습니다.
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
두 명령을 사용하고 임시 파일을 만듭니다. 동일한 작업을 수행 할 수 있지만 결합 된 파일을 만드는 것을 우회하는 방법이 있습니까?
답변
당신은 cat
파이프를 사용할 수 있습니다 :
cat file1 file2 file3 ... fileN | ./script
파이프를 사용하고 임시 파일을 사용하지 않는 예 :
join file1.txt file2.txt | ./script
답변
파이프를 사용하지 않으려면 프로세스 대체와 함께 입력 리디렉션을 사용할 수 있습니다.
./script <(cat file1 file2)
답변
@Jonah Braun의 답변을 추가하려면 스크립트에 프로세스 출력을 추가 해야하는 경우 파일이 디스크에 없지만 유사한 도구 를 URL
사용하여 액세스 할 수 있습니다 curl
.
이와 같은 것을 사용하여 stdout
여러 프로세스 를 가져 와서 스크립트에서 사용할 수 있습니다.stdin
다음의 입력 내용을 처리하는 스크립트가됩니다 multi-input.sh
.
#!/usr/bin/env bash
while read line; do
echo $line
done
이제 테스트하십시오.
$ ./multi-input.sh < <(cat <(echo process 1) <(echo process 2) <(echo process 3))
산출:
process 1
process 2
process 3
<()
회전은 가상으로 처리 file
하여 fd
당신이 그렇게한다면 <
그것을 읽을 필요가있다. cat
그 자체로 기능을 수행하기 때문에 가상 또는 실제 파일을 연결하기 때문에 필요하지 않습니다.