programing

같은 회선상에서 에코를 표시 및 갱신하는 방법

easyjava 2023. 4. 19. 23:36
반응형

같은 회선상에서 에코를 표시 및 갱신하는 방법

Bash에 다음이 있습니다(Linux).

for dir in Movies/*
do
  (cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
  exiftool * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done

다만, 「에코」가 다음 행에 다음의 에코를 나타내도록 하고 싶다(마지막 에코 출력과 접속하지 않고 치환한다).같은 줄에 백분율이 있는 진행률 막대가 표시되는 것과 유사합니다.

음, 나는 정확하게 읽지 않았다.man echo호출해 주세요.

echo세 번째 탈옥 캐릭터를 추가하면이렇게 할 수 있는 게 2가지 있어요

두 가지 옵션이 있습니다.-n그리고.-e.

-n는 후행 뉴라인을 출력하지 않습니다.그래서 매번 에코를 울릴 때마다 새로운 라인으로 가는 것을 피할 수 있습니다.

-e백슬래시 이스케이프 기호를 해석할 수 있습니다.

이 경우 어떤 이스케이프 기호를 사용할지 맞춰 보십시오.\r네, 캐리지 리턴을 하면 처음부터 다시 시작할 수 있고 시각적으로 같은 라인에서 업데이트되는 것처럼 보입니다.

에코 라인은 다음과 같습니다.

echo -ne "Movie $movies - $dir ADDED!"\\r

탈출 상징을 벗어나야 했어 그래야 배쉬가 죽이지 않았지그것이 당신이 2를 보는 이유입니다.\를 참조해 주세요.

윌리엄이 말했듯이printf님은 이와 같은 (더욱 광범위한) 작업도 할 수 있습니다.

잘 알고 있으면 에코를 다음 행으로 대체할 수 있습니다.

echo -ne "Movie $movies - $dir ADDED! \033[0K\r"

다음은 동작을 이해하기 위해 실행할 수 있는 작은 예입니다.

#!/bin/bash
for pc in $(seq 1 100); do
    echo -ne "$pc%\033[0K\r"
    sleep 1
done
echo

나머지 답변은 매우 좋으나, 다른 사람이 여기에 와서 여러 줄의 에코를 대체/업데이트할 솔루션을 찾을 경우를 대비해서 몇 가지 추가 정보를 추가하고자 합니다.

그래서 저는 여러분들과 예를 하나 들어보려고 합니다.다음 스크립트는 Cent에서 시도되었습니다.OS 시스템 및 "timedatectl" 명령어를 사용합니다.이 명령어는 기본적으로 시스템 상세 시간 정보를 출력합니다.

출력에 여러 행이 포함되어 있고 다음 예에서 완벽하게 동작하기 때문에 이 명령을 사용하기로 결정했습니다.

#!/bin/bash
while true; do
  COMMAND=$(timedatectl) #Save command result in a var.
  echo "$COMMAND" #Print command result, including new lines.

  sleep 3 #Keep above's output on screen during 3 seconds before clearing it

  #Following code clears previously printed lines
  LINES=$(echo "$COMMAND" | wc -l) #Calculate number of lines for the output previously printed
  for (( i=1; i <= $(($LINES)); i++ ));do #For each line printed as a result of "timedatectl"
    tput cuu1 #Move cursor up by one line
    tput el #Clear the line
  done

done

위는 "의 결과를 출력합니다.timedatectl"는 영구히 이전 에코를 갱신된 결과로 대체합니다.

이 코드는 하나의 예에 불과하지만 필요에 따라서는 최적의 솔루션이 아닐 수 있습니다.(적어도 시각적으로) 거의 같은 동작을 하는 유사한 명령어는 다음과 같습니다.watch -n 3 timedatectl".

하지만 그건 다른 이야기야.:)

도움이 됐으면 좋겠네요!

printf를 사용하고 있습니다.작업에 플래그가 필요 없기 때문에 더 짧습니다.

printf "\rMy static $myvars composed text"

이것은 매우 편리합니다.사용해 보고 필요에 따라 변경해 주세요.

#!/bin/bash
for load in $(seq 1 100); do
    echo -ne "$load % downloded ...\r"
    sleep 1
done
echo "100"
echo "Loaded ..."

이거 드셔보세요.나만의 버전...

funcc() {
while true ; do 
for i in \| \/ \- \\ \| \/ \- \\; do 
  echo -n -e "\r$1  $i  "
sleep 0.5
done  
#echo -e "\r                                                                                      "
[ -f /tmp/print-stat ] && break 2
done
}

funcc "Checking Kubectl" & &>/dev/null
sleep 5
touch /tmp/print-stat
echo -e "\rPrint Success                  "

여기i메아리치다

for i in $(seq 1 50); do
  echo -ne "$i%\033[0K\r"
  sleep 50
done
echo "ended"

언급URL : https://stackoverflow.com/questions/12628327/how-to-show-and-update-echo-on-same-line

반응형