cat 명령이 첫 번째 파일 설명자에서만 읽는 이유는 무엇입니까?

cat 명령이 첫 번째 파일 설명자에서만 읽는 이유는 무엇입니까?

콘솔에서 빈 파일 2개를 생성하고 동시에 읽으려고 했습니다.

$ echo -n '' | tee f1 > f2
$ cat f1 f2
$ cat <(tail -f f1) <(tail -f ./f2)

다른 콘솔에서 테스트를 실행했습니다.

$ echo 'tee test' | tee -a f1 >> f2
$ echo 'f1 test' >> f1
$ echo 'f2 test' >> f2
$ cat f1 f2
tee test
f1 test
tee test
f2 test

그러나 cat첫 번째 콘솔에서는 첫 번째 항목만 읽습니다 fd.

$ cat <(tail -F ./f1) <(tail -F ./f2)
tee test
f1 test

왜? 그렇다면 두 개 이상의 파일 설명자를 동시에 읽는 방법은 무엇입니까?

답변1

cat해당 인수를 순서대로 처리합니다. tail -f f1계속 실행되므로 cat에 대한 입력을 계속 기다리고 <(tail -f f1)처리를 계속하지 않습니다 <(tail -f f2).

tail -f f2첫 번째 항목을 종료하면 출력이 표시됩니다 tail.

여러 파일을 동시에 추적하는 더 나은 도구는 tail그 자체입니다(적어도 GNU tail).

tail -f f1 f2

파일 헤더를 보지 않으려면 다음을 사용하십시오 -q.

tail -qf f1 f2

답변2

cat a ba에서 동시에 읽지 않습니다 b. 열고 a, 처음부터 끝까지 읽고, 닫은 a다음 인수로 제공된 다음 파일에 대해 계속 동일한 작업을 수행합니다.

인수가 더미 파일이므로 tail -f"끝"이 없으면 cat첫 번째 파일만 읽습니다.

어떤 이유로 한 번에 여러 파일을 열어야 하는 경우 paste 다음 방법을 사용할 수 있습니다.

$ echo f1 >f1; echo f2 >f2
$ cat <(tail -F f1) <(tail -F f2)
f1
^C

$ paste <(tail -F f1) <(tail -F f2)
f1      f2
^C

관련 정보