質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

4回答

6277閲覧

シェルスクリプトの進捗表示

ktkch.

総合スコア6

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

2クリップ

投稿2020/09/16 14:55

編集2020/09/16 16:05

前提・実現したいこと

シェルスクリプトの実行時間が長く、実行中なのかハングしているのか判断できないので、進捗率を表示することができれば親切だと考えました。

考えていること

スクリプト全行と実行中スクリプトのコマンド行を比較して疑似的に進捗率の表示ができないかと考えました。
しかし、実行中スクリプトのコマンド行を取得する方法が分からず行き詰っています。
実行中スクリプトのコマンド行を取得することはできますでしょうか?

リアルタイムにコマンドラインに進捗率〇%と表示するイメージです。
表示自体はechoもしくはprintfを考えています。

echo $sinchoku/r

以下はスクリプト進捗率25%時のイメージです。

hoge.sh 行 : 24 25 echo "Hello" #実行中 26 : 全100行

追記
実行時間は可変です。(対象となるファイル数による)

その他

私には上記のアイディアしか出てこなかったのですが、よりよいアイディアがありましたらご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2020/09/16 15:27

どこの処理で時間がかかっているのか把握していますか。
ktkch.

2020/09/16 15:31

多くのWhile文があり、差はあれど各々時間がかかっている認識です。
1T2R3M4

2020/09/16 15:45

while文の中で . を周期的に置いていくとか可能ですかね。 例えばループごと echo ”Enter while" while XX do echo -n "." xxxxx xxxxx done echo ”while done" みたいな
guest

回答4

0

行数を表示するのは無意味だと思います。実行時間と関係ないので。
空行やechoは数行でも一瞬で終わるのに、時間のかかるコマンドは1行でも分単位で時間がかかる。
一瞬で終わるコマンドだけが数万行もあるスクリプトなら、あなたの考えで良いですけど。

時間がかかるコマンド内部の進捗表示を考えるべきでは?

投稿2020/09/16 15:35

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コマンド行を比較しても、そのコマンドが
どれくらい時間がかかるか判らないと意味ないですよね。

テストを重ねて実行時間が判っているなら別ですが、
それでも、ハングしている場合は実時間との差異も
計測or表示しないといけないでしょう。

スクリプトのpidを調べて、消えたら終わり
消えなかったら、date +"%s"などで

経過時間を表示するwapperを作ればいかがでしょうか。
※予測時間と実時間のズレまで表示できれば、言うこと無いですね。

具体的な中身ですか?
ご相談下さい。

投稿2020/09/16 15:33

hana_yama_san

総合スコア923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ktkch.

2020/09/16 16:03

ご回答ありがとうございます。まさしくその通りです。質問に記載しておらず申し訳ないのですが、スクリプトの対象となるファイル数によって実行時間が変わりますので、擬似的に行数で考えていました。
hana_yama_san

2020/09/16 16:22

ちゃんと時間をtimeを入れてテストを重ねるとか、 (もっと言うなら工夫してvmstatやiostat程度は) 計測しましょう。
guest

0

僕はよくこういうの使います。

sh

1count=0 2for i in $( seq 1 100 ) ; 3do 4 # // your commands here 5 sleep 0.2s 6 : $(( count++ )) 7 echo -ne "Processing: ${count}/100 \033[0K\r" 8done

イメージ説明

投稿2021/05/22 11:17

igar

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

bashのprogress barで宜しければこちらにある関数はいかがでしょうか。

bash

1#!/bin/bash 2# progress bar function 3prog() { 4 local w=80 p=$1; shift 5 # create a string of spaces, then change them to dots 6 printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.}; 7 # print those dots on a fixed-width space plus the percentage etc. 8 printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*"; 9} 10# test loop 11for x in {1..100} ; do 12 prog "$x" still working... 13 sleep .1 # do some work here 14done ; echo

投稿2020/09/22 01:59

t-taro

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問