svn export
내 응용 프로그램의 패키지 스크립트의 일부로 사용 하고 있으며 다른 많은 명령과 마찬가지로이 명령에는 진행률 표시 줄이없는 것처럼 보입니다.
현재 두 가지 선택이 있습니다.
- 옵션없이 사용하고 수천 줄을 인쇄하는 것을 지켜보십시오.
- 을 사용
--quiet
하고 완료 될 때까지 아무것도 붙 잡지 마십시오.
최소한 명령으로 출력되는 줄 수를 실시간으로 표시하는 방법이 있습니까? 같은 :
Exporting SVN directory ... 1234 files
이 숫자 1234
가 실시간으로 증가하는 것을 보 시겠습니까? 출력을이 명령을 수행하는 파이프로 상상할 수 있지만 어느 명령입니까?
답변
yourcommand | { I=0; while read; do printf "$((++I))\r"; done; echo ""; }
또는 괄호로 묶은 섹션을 쉘 스크립트에 넣으십시오. 쉘이 실제로 bash, ksh93 또는 zsh와 같은 사전 증분 연산자를 지원하는 경우에만 작동합니다. 그렇지 않으면에서 $I
와 같이 증분 한 다음 인쇄해야합니다 I=$((I+1));printf...
. 또한 printf
쉘에 내장되어 있지 않은 경우 (현재 bash가 내장 된 경우) 성능을 향상 echo -ne
시키거나 print -n
대신 사용할 수 있습니다 . 개행을 억제하고 \ r을 이스케이프 문자로 해석하려고합니다.
답변
이것은 대략적인 아이디어이지만 pv
명령을 사용하여 행 수를 계산하여 화면에 표시 할 수 있습니다. pv
많은 스위치 중에는 -l
통과하는 각 줄을 계산 하는 스위치가 있습니다.
예
여기에서는 SVN 출력에서 일부 파일을 시뮬레이션하기 위해 while 루프를 사용하고 있습니다.
$ for i in $(seq 100); do echo "file$i"; sleep 2; done | pv -l -c >/dev/null
3 0:00:05 [0.99/s ] [ <=>
다음과 같이 출력 라인을 계속 덮어 씁니다.
18 0:00:36 [ 0/s ] [ <=> ]
24 0:00:47 [0.991/s ] [ <=> ]
답변
백그라운드에서 작업을 명령으로 실행하고 stdout (및 stderr을 선택적으로)을 로그 파일 command > logfile &
로 경로 재 &
지정할 수 있습니다 . 여기서 작업을 지정합니다 (stderr도 &>
대신 >
).
그런 다음 wordcount 유틸리티를 사용하여로 로그 파일의 줄 수를 계산할 수 있습니다 wc -l
.
동적으로 변경되는 한 줄에 상태 변경을 표시하려면과 같은 것을 사용할 while true; do echo -en '\r'; wc -l logfile; sleep 1; done
수 있지만 bash가 \r
이전 줄의 내용을 죽 이도록 캐리지 리턴을 강제로 끌 수는 없습니다 .