다음을 사용하여 백그라운드에서 대용량 파일을 다운로드하기 시작했습니다.
$ nohup wget http://example.tld/big.iso &
이것은 또한 나에게 nohup.out
include 를 제공합니다 wget
.
이제 나중에 다운로드 과정을 보고 싶다면할 수 있다사용 $ tail -f nohup.out
하지만 원하는 것보다 더 빨리 터미널 창이 채워집니다. 내가 보고 싶은 것은 마지막 행이 지속적으로 업데이트되는 것입니다( wget
단독으로 사용될 때처럼).
시도해 보았지만 $ tail -n 1 -f nohup.out
초기 꼬리에만 영향을 미치는 것 같습니다.
일반적으로 말해서 이 문제는 명령 출력에 사용 가능/표시되는 줄 수를 제한(이 경우 1)할 수 있으면 해결될 수 있습니다. 출력을 넣는 것과 비슷합니다.순환 버퍼- 일반적인 진행률 표시줄이 $ wget example.tld/big.iso
인쇄될 것이라고 생각하세요.
이에 대한 해결책이 있습니까?
아니면 내가 나무에 잘못 오르고 있는 걸까? (즉, nohup
출력을 제한하거나 다른 작업을 수행하는 것이 더 쉬울까요?)
답변1
스크롤 영역을 제한하지 않으려면(다른 답변 참조) 다음 줄을 인쇄하기 전에 캐리지 리턴을 사용하여 줄의 시작 부분으로 돌아갈 수도 있습니다. 줄의 나머지 부분을 지우는 이스케이프 시퀀스가 있는데, 이는 현재 줄이 이전 줄보다 짧을 때 필요합니다.
nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
el="$(tput el)"; # Clear to the end of the line
tail -n 1 -f nohup.out | while read -r line; do echo -n $'\r'"$el$line"; done;
답변2
여기서 사용할 수 있습니다 watch
:
watch -n 0.5 -e "tail -n 1 nohup.out"
편집하다: -e
(별칭 --exec
) 옵션이 여기에 적합한 것 같습니다. 특히 매우 작은 간격으로 실행하는 것이 목표인 경우 watch
각 주기 내에서 실행함으로써 발생하는 오버헤드가 줄어듭니다.sh -c
watch
답변3
특정이있다Xterm 제어 순서이를 사용하여 터미널이 스크롤하는 줄 수를 제한할 수 있습니다. "스크롤 영역 설정"을 찾으십시오. 하지만 조금 지저분합니다. 나중에 터미널을 재설정해야 합니다.
nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
clear; echo -n $'\e[1;2r'; tail -f nohup.out | grep --line-buffered .
# The "grep" line is to ensure a single line; you can also use "awk 1" or "sed" etc.
답변4
출력이 현재 터미널 창 전체를 차지하지 않도록 하려면 간단한 while
루프를 사용할 수 있습니다.
while true; do
XXX=$( tail -n1 my.log )
echo -en " \r$XXX\r"
sleep 0.5
done; echo