명확성을 위해 편집됨:
다음 스크립트가 있다고 가정해 보겠습니다(pv 및 컬이 설치되어 있다고 가정).
(현재 우분투에서 실행 중이지만 더 많은 Linux 배포판에서 실행될 수 있도록 POSIX 호환으로 만들 계획입니다)
#!/bin/bash
sudo apt install vlc
mkdir -p ~/.steam/compatibilitytools.d
PROTONVERSIONNUMBER=$(curl -v --silent https://api.github.com/repos/popsUlfr/Proton/releases 2>&1 | grep "tag_name" | head -n 1 | cut -f4,4 -d"\"")
REPLACING=$(curl -v --silent https://api.github.com/repos/popsUlfr/Proton/releases 2>&1 | grep "target_commitish" | head -n 1 | cut -f4,4 -d"\"" | sed "s/[^_]\+/\L\u&/g")
PROTONVERSION=${REPLACING/_G/-6_G}
PROTONNAME=$PROTONVERSION"_"${PROTONVERSIONNUMBER##*-}
wget https://github.com/popsUlfr/Proton/releases/download/$PROTONVERSIONNUMBER/$PROTONNAME.tar.xz
pv $PROTONNAME.tar.xz | tar xp -J -C ~/.steam/compatibilitytools.d
rm $PROTONNAME.tar.xz
제 눈에는 매우 보기 좋은 세 개의 진행률 표시줄이 표시됩니다.
정확함과 그런 것들은 모르겠어 날 이상한 놈이라고 불러
질문
기본 "실제" 진행률 표시줄의 현재 진행률 표시줄 "속도"를 준수하는 연속 진행률 표시줄을 형성하기 위해 이 세 개의 독립적인 진행률 표시줄의 기능을 어떻게 활용할 수 있습니까?
답변1
다음은 여러 "작업" 섹션이 모두 동일한 일정을 업데이트하도록 하는 방법을 보여주는 샘플 코드입니다. Whiptail 계측기는 스크립트의 파일 설명자 3에 첨부되어 스크립트 도중 언제든지 업데이트될 수 있습니다. (스크립트가 종료되거나 FD 3이 명시적으로 닫히면 계측기가 자동으로 종료됩니다.)
#!/bin/bash
#
pid=
tmpd=
tidyUp()
{
# Clean up when we're done
exec 3>&-
[[ -n "$tmpd" ]] && rm -rf "$tmpd"
}
trap 'ss=$?; tidyUp; exit $ss' 1 2 15
updateGauge()
{
local percent="$1" message="$2"
printf "XXX\n%d\n%s\nXXX\n" $percent "$message" >&3
}
# Create the FIFO for communicating with the whiptail gauge
tmpd=$(mktemp --tmpdir --directory "wt.XXXXXXXXXX")
mkfifo "$tmpd/fifo"
# Start up the whiptail gauge and associate FD 3 with its status
whiptail --title 'Progress meter' --gauge 'Starting examples' 6 50 0 <"$tmpd/fifo" &
exec 3>"$tmpd/fifo"
# Real code starts here
percent=0
for example in 1 2 3
do
updateGauge $percent "Getting example $example"
sleep 3 # wget something
percent=$((percent + 20))
done
for another in 4 5
do
updateGauge $percent "Doing work for another example $another"
sleep 2 # do some work
percent=$((percent + 20))
done
# Done
tidyUp
exit 0