2017-04-18 17 views
1

私はむしろBASHには新しく、同じ2行に2つの文字列を印刷するにはどうしたらいいでしょうか?BASHは同じ2行に2つの文字列を印刷します

私がやっていることは、BASHで2行のプログレスバーを作成することです。 作成1つのラインのプログレスバーは、私はこのようにそれを行うには、かなり簡単です:

echo -en 'Progress: ###   - 33%\r' 
echo -en 'Progress: #######  - 66%\r' 
echo -en 'Progress: ############ - 100%\r' 
echo -en '\n' 

しかし、今、私は同じことをやろうとしているが、2線で、そして私が試したすべてのものは、これまでに失敗しています。

2番目の行では、どの変数が収集されているか、どの機能が実行されているかなど、スクリプトのどの時点であるかを示す「Progress Detail」を入れたいと思います。しかし、私はちょうど2行のプログレスバーを作成できないようです。

+0

申し訳ありませんが、PAL、私はあなたがそれを行うことができるとは思いません。しかし、同じ行に進捗状況を入れることを検討しないでください – sjsam

+0

[シェルスクリプトにプログレスバーを追加する方法は?](http://stackoverflow.com/questions/238073/how-to-add-a-progress -bar-to-a-shell-script) –

+0

@djmいいえ、それは単一行のプログレスバーだけをカバーします。これは具体的には複数の行を要求しています。 – tripleee

答えて

0

\033[Fを使用すると前の行に、\033[2Kを使用すると現在の行が消去されます(出力の長さが変わった場合のみ)。

echo -en 'Progress: ###   - 33%\r' 
echo -en "\ntest" # writes progress detail 
echo -en "\033[F\r" # go to previous line and set cursor to beginning 

echo -en 'Progress: #######  - 66%\r' 
echo -en "\n\033[2K" # new line (go to second line) and erase current line (aka the second one) 
echo -en "test2"  # writes progress detail 
echo -en "\033[F\r" # go to previous line and set cursor to beginning 

echo -en 'Progress: ############ - 100%\r' 
echo -en "\n\033[2K" # new line and erase the line (because previous content was "test2", and echoing "test" doesn't erase the "2") 
echo -en "test"  # write progress detail 
echo -en '\n' 
1

それは、例えば、tputprintfを使用して二重線を上書きすることが可能です:

function status() { 
    [[ $i -lt 10 ]] && printf "\rStatus Syncing %0.0f" "$((i * 5))" ; 
    [[ $i -gt 10 ]] && printf "\rStatus Completing %0.0f" "$((i * 5))" ; 
    printf "%% \n" ; 
} 

for i in {1..20} 
do status 
    printf "%0.s=" $(seq $i) ; 
    sleep .25 ; tput cuu1 ; 
    tput el ; 
done ; printf "0%%\n" ; printf " %.0s" {1..20} ; printf "\rdone.\n" 

ワンライナー:

for i in {1..20}; do status ; printf "%0.s=" $(seq $i) ; sleep .25 ; tput cuu1 ; tput el ; done ; printf "0%%\n" ; printf " %.0s" {1..20} ; printf "\rdone.\n" 
私がやったスクリプトです

ループはthを呼び出しますe statusは、特定の時間に適切なテキストを表示する機能です。

結果の出力は次のようになります。

Status Completing 70% 
============== 
関連する問題