콘솔에서 빈 파일 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 b
a
에서 동시에 읽지 않습니다 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