내가 시작했다고 가정하면 program
표준 출력에 일부 출력을 쓰는 작업이 진행됩니다. 파이프라인이 생성하는 행 수를 계산할 수 있도록 파이프라인을 추가할 수 있는 방법이 있습니까 wc -l
?
답변1
Linux에서는 이 작업을 수행할 수 있습니다. 스크립트가 있다고 가정합니다 s
.
#!/bin/bash
i=0
echo my pid: "$$"
while true; do
echo "$i"; ((i++)); sleep 1;
done
달리다:
$ ./s
my pid: 8815
0
1
2
그게 다입니다. 이제 gdb
프로세스에 연결해야 합니다.
gdb -p 8815
이제 여기에서 다음을 수행하십시오 gdb
.
p close(1)
그러면 STDOUT 파일 설명자가 닫힙니다. 이제 새 항목을 엽니다.
p creat("/tmp/8815.out", 0600)
다른 터미널에서는 이미 읽기 프로세스를 설정할 수 있습니다.
tail -f /tmp/8815.out
gdb
다른 터미널에서 분리 해야 하므로 아직 진행이 없습니다 . + Ctl또는 D:
q
Quit anyway? (y or n)
y
사용하고 확인하세요 Enter. 이제 다음과 같은 내용이 표시됩니다( tail
where run).
173
174
175
기존 파일이나 파이프를 사용하려면 다음에서 수행하세요 gdb
.
p open("/path/to/your/output", 1)
이는 STDOUT 리디렉션을 보여줍니다. 숫자가 2라는 점을 제외하면 STDERR과 유사합니다.
나는 다음 두 가지 답변을 사용했습니다.
답변2
tee
프로그램 시작 시 사용 가능합니다. Bash를 사용하면 다음을 수행할 수 있습니다.
program > >(tee -a log.txt)
program
대신 stdout을 실행 중인 프로세스로 리디렉션합니다 tee
. 이는 실제로 program
to의 표준 출력 사본을 작성합니다 log.txt
. tee
작동 방식에 따라 이전에 갔던 곳(아마도 터미널)으로 표준 출력을 계속 보낼 것입니다 program
.