ウェブサイト検索

Bashでプログレスバーを作成する


スクリプトの実行中に固定の時間を待つ必要がある場合、ユーザーにしばらく待つように通知するためにプログレスバーを作成する方が良いです。プログレスバーは、シンプルなBashスクリプトや「cv」や「dialog」などのいくつかの組み込みLinuxコマンドを使用して作成できます。Bashスクリプトを使用してプログレスバーを作成する方法は、このチュートリアルで示されます。

Bashでプログレスバーを作成する異なる例

このチュートリアルのこの部分では、Bashで進捗バーを実装する異なる方法が示されています。

例1: コマンドなしでシンプルなプログレスバーを実装する

以下のスクリプトを使用してプログレスバーを表示するBashファイルを作成します。プログレスバーは「#」文字と「sleep」コマンドを使用して表示されます。進捗バーを表示するために「printf」コマンドがここで使用されます。プログレスバーは4つの部分に分かれています。25%は1秒後に表示されます。50%は3秒後に表示されます。75%は2秒後に表示されます。100%は1秒後に表示されます。

#!/bin/bash

printf "\nWait to complete the task...\n\n"

#Wait for 1 second

sleep 1

#Print the first part of the progress bar

printf "[##### ] 25%% completed.\r"

#Wait for 3 seconds

sleep 3

#Print the second part of the progress bar

printf "[########## ] 50%% completed.\r"

#Wait for 2 seconds

sleep 2

#Print the third part of the progress bar

printf "[############### ] 75%% completed.\r"

#Wait for 1 second

sleep 1

#Print the last of the progress bar

printf "[####################] 100%% completed.\r"

printf "\n\nTask completed.\n\n"

スクリプトを実行してから1秒後に次の出力が表示されます:

スクリプトを実行してから7秒後に次の出力が表示されます:

例2: 「Pv」コマンドを使ってプログレスバーを実装する

「pv」コマンドの完全な形式は「パイプビューア」です。これは、パイプを通過するデータの進行状況を監視し、データのサイズに基づいて進行状況バーを表示するために使用されます。このコマンドはデフォルトでシステムにインストールされていません。この例のスクリプトを練習する前に、「pv」コマンドをインストールするために以下のコマンドを実行してください:

sudo apt install pv

大きなサイズのファイルを一つの場所から別の場所にコピーするために選択する必要があります。次のスクリプトを使用して、現在の場所から「/home/fahmida/temp/」の場所に「test.txt」ファイルをコピーするBashファイルを作成してください。「pv」コマンドはここで進捗バーを表示するために使用されます。進捗バーは「test.txt」ファイルのサイズに基づいて表示されます。

#!/bin/bash

echo "Copying file from one location to another location."

#Wait for 2 seconds

sleep 2

#Copy the file to the destination

cat test.txt | pv -s $(stat -c%s test.txt) > /home/fahmida/temp/test.txt

echo "File has been copied."

スクリプトの実行が完了した後、次の出力が表示されます:

例3: 「ダイアログ」コマンドを使ったプログレスバーの実装

Bashでプログレスバーを実装するもう一つの方法は、「dialog」コマンドを使用することです。このコマンドは、ターミナルに見栄えの良いプログレスバーを表示するために使用できます。このプログレスバーを使用して、さまざまな種類のウィジェットを表示できます。このコマンドで表示されるプログレスバーのタスクは、Bashスクリプトによって制御できます。このプログレスバーは、システムにデフォルトでインストールされていません。システムにこのプログレスバーをインストールするには、次のコマンドを実行してください:

sudo apt install dialog

次のスクリプトを使用して進捗バーを表示するBashファイルを作成します。このスクリプトでは「dialog」コマンドを使用し、「/etc/passwd」ファイルを「/home/fahmida/tempdir」位置にコピーするタスクが進捗バーで表示されます。進捗バーは5つの部分に分かれており、各部分は2秒ごとに表示されます。「dialog」コマンドの-titleオプションを使用して進捗バーのタイトルを表示します。「dialog」コマンドの-gaugeオプションを使用して、高さ10行、幅100文字の進捗バーを表示します。「タスクの完了を待っています」というメッセージが進捗バーの上に表示されます。

#!/bin/bash

#Initialize the counter

current_pos=0

(

#Define an infinite loop

for((;;))

do

cat <<EOF

delimiter

$current_pos

#Show the current counter value

cp /etc/passwd to /home/fahmida/tempdir ( $current_pos%):

delimiter EOF #Increment the counter by 20 (( current_pos+=20 )) #Terminate from the loop when the counter value is more than 100 [ $current_pos -gt 100 ] && break #Wait for 2 seconds after each increment sleep 2 done ) | dialog --title "Copying file..." --gauge "Waiting to complete the task" 10 100 0

スクリプトを実行してから6秒後に次の出力が表示されます:

スクリプトを実行してから10秒後に次の出力が表示されます:

結論

このチュートリアルでは、Bashスクリプトを使用して進捗バーを開発するさまざまな方法が示されており、Bashユーザーがプログラムで進捗バーを使用できるように支援します。