12

結果を stdout に出力するが、同じ行に出力するコマンドが端末に表示されることがあります。たとえば、wget は以下のような矢印を出力します。

0[=>        ]100%
0[  =>      ]100%
0[    =>    ]100%
0[      =>  ]100%
0[        =>]100%

同じ行に出力されるので、矢印が動いているように見えます。bash または sh を使用してプログラムで同じことを達成するにはどうすればよいですか? 他のツールを使用する必要がありますか?

アップデート:

Linux、GNUベースのユニックスにデフォルトで付属するwgetについて言及したことは知っています... BSDでも機能する一般的なアプローチはありますか? (OSXのように)-> OK、shの代わりにbashを使用すると動作します:)

4

3 に答える 3

17

特殊文字 を使用します\r。次の行には行かず、行頭に戻ります。

for i in {1..10} ; do
    echo -n '['
    for ((j=0; j<i; j++)) ; do echo -n ' '; done
    echo -n '=>'
    for ((j=i; j<10; j++)) ; do echo -n ' '; done
    echo -n "] $i"0% $'\r'
    sleep 1
done
于 2013-08-02T12:49:53.967 に答える
12

\rこの目的のために使用できます:

たとえば、これは同じ行で現在の時刻を更新し続けます。

while true; do echo -ne "$(date)\r"; done
于 2013-08-02T12:49:44.757 に答える