Bash에서 I/O 없이 명령 모음을 사용하시나요?

Bash에서 I/O 없이 명령 모음을 사용하시나요?

출력되는 모습이 정말 맘에 듭니다bar

하지만 이 스크립트는 입출력 작업에만 사용됩니다.

시각적 피드백을 제공하면서 수면 대체품으로 어떻게 사용할 수 있나요?

sleep 10

답변1

를 사용하여 이 작업을 수행할 수 있는 방법이 없습니다 bar. 그러나 동일한 작업을 수행하고 필요에 더 잘 맞는 다른 명령에 관심이 있을 수 있습니다.

방법 #1 - 가장

이 방법은 이전에 화면에 있던 내용을 더 큰 진행률 표시줄로 덮어씁니다. 간단하지만 효과적인.

예, ex.bash:

#!/bin/bash

echo -ne '#####                     (33%)\r'
sleep 1
echo -ne '#############             (66%)\r'
sleep 1
echo -ne '#######################   (100%)\r'
echo -ne '\n'

방법 #2 - 파이프라인 보기

이 명령은 pv진행률 표시줄 기능을 제공합니다. 이 게시물에서 더 자세한 예를 볼 수 있습니다.알아야 할 Unix 유틸리티: 파이프 뷰어.

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

방법 #3 - 스피너

다음 예제 코드를 사용하여 간단한 루프로 자신만의 "스피너"를 구축할 수 있습니다. 루프 내에 원하는 명령을 포함할 수 있습니다. 이 코드는 다음 기사에서 가져온 것입니다.Bash에서 스피너를 만들 수 있나요?.

#!/bin/bash

sp='/-\|'
printf ' '
for i in $(seq 3); do
  printf '\b%.1s' "$sp"
  sp=${sp#?}${sp%???}
  sleep 1
done
echo ''

방법 #4 - 대화 상자

dialog원하는 것을 수행하는 명령이 있습니다 . 그래픽 대화 상자를 사용하지만 ncurses를 기반으로 하므로 ncurses가 지원되는 한 대부분의 터미널 및/또는 스크립트에서 작동합니다. 넌 다 볼 수 있어dialog프로젝트 웹사이트의 문서.

스크린샷

SS사양

인용하다

답변2

구현하기가 쉽지 않은 것 같습니다. 아래 bash 기능(bar)은 bar스크립트와 유사하게 작동합니다(짧은 스크린캐스트 기반). 또한 터미널 너비에 따라 동적으로 크기가 조정됩니다(다음 호출 시 bar).

#!/bin/bash

#Helper functions
terminal_width(){
  local width_height=`stty size`
  echo ${width_height/* /}
}
string_times_n(){
  local s=$1
  local n=$2
  for((i=0;i<n; i++)); do echo -n "$s"; done
}
##The actual function
bar(){
  local percentage=$1
  local padding=10
  local width=$(echo "scale=0; 0.5 * $(terminal_width)" | bc | cut -d. -f1)
  local equals_n=$(echo "$percentage * $width / 100" | bc | cut -d. -f1)
  local dots_n=$((width - equals_n))

  #ANSI escape sequence magic
  local Esc="\033["
  local up="$Esc""K""$Esc""1A""$Esc""K"

  #Clear the line
  string_times_n ' ' "$width"
  echo -ne "\r"

  #Print the current screen
  printf  "%3s%% [" "$percentage"
    string_times_n '=' "$equals_n"
    string_times_n '.' "$dots_n"
  echo -n "]"

  #Go up unless finished
  if [[ "$percentage" == 100 ]] 
  then
    echo
  else
    echo -e "$up"
  fi
}

용법

. bar.sh #Assuming it's saved in bar.sh
bar $percentage

주기적 진행 예시:

for i in {1..10}; do bar $((i*10)); sleep 0.1; done;

무작위 진행 예시:

for i in {1..10}; do bar $((i*10)); sleep `echo $RANDOM / 10000|bc`; done;

관련 정보