여러 파일의 내용을 스크립트의 stdin에 제공하는 속기


20

화면에서 일부 결과를 script읽고 stdin뱉어내는 이라는 스크립트가 있다고 가정 해 봅시다 .

한 파일의 내용을 제공하려면 다음을 입력했을 것입니다.

$ ./script < file1.txt

그러나 여러 파일의 내용을 동일한 방식으로 스크립트에 공급하려면 어떻게해야합니까? 내가 지금까지 생각해 낸 최선은 다음과 같습니다.

cat file1.txt file2.txt > combined.txt && ./script < combined.txt

두 명령을 사용하고 임시 파일을 만듭니다. 동일한 작업을 수행 할 수 있지만 결합 된 파일을 만드는 것을 우회하는 방법이 있습니까?


로 전환하면 zsh다음을 실행할 수 있습니다 cmd <file1 <file2 ... <fileN;)
don_crissti

답변:


20

당신은 cat파이프를 사용할 수 있습니다 :

cat file1 file2 file3 ... fileN | ./script

파이프를 사용하고 임시 파일을 사용하지 않는 예 :

join file1.txt file2.txt | ./script

도 너무나 간단해서 어떻게 자신을 깨닫지 못했는지조차 모르겠습니다. 감사!
0x4B1D

10
고양이 상을 유용하게 사용!
glenn jackman

4
@Bruce Ediger : 나는 그냥 사용하는 방법 지적했다 가정 join임시 파일없이,하지만 그냥 독자에게 명확하게하려면 다음 cat f1 f2과 같은 출력을 생성하지 않습니다join f1 f2
Peter.O

@fred 이것을 지적 해 주셔서 감사합니다. 예를 들어서 가지고 놀았 join기 때문에 예제에서 사용했습니다. 실제로, 내 예에서는을 사용했습니다 cat.
0x4B1D

10

파이프를 사용하지 않으려면 프로세스 대체와 함께 입력 리디렉션을 사용할 수 있습니다.

./script <(cat file1 file2)

3

@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그 자체로 기능을 수행하기 때문에 가상 또는 실제 파일을 연결하기 때문에 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.