以下を使用して、バックグラウンドで大容量ファイルのダウンロードを開始しました。
$ nohup wget http://example.tld/big.iso &
これも私にnohup.out
インクルードを提供しますwget
。
今後ダウンロードプロセスを見たい場合できる使用します$ tail -f nohup.out
が、必要なものよりも早く端末ウィンドウが埋められます。私が見たいのは、最後の行が継続的に更新されることです(単独でwget
使用されている場合のように)。
試してみましたが、$ tail -n 1 -f nohup.out
最初の尾にのみ影響を与えるようです。
一般的に言えば、この問題は、コマンド出力に使用可能/表示される行数を制限(この場合は1)できる場合は解決できます。出力を入れるのと似ています。循環バッファ- 一般的な進行状況バーが$ wget example.tld/big.iso
印刷されると思います。
これに対する解決策はありますか?
それとも私が木に間違って登っているのでしょうか? (つまり、nohup
出力を制限したり、他のタスクを実行する方が簡単ですか?)
答え1
スクロール領域を制限したくない場合は(他の回答を参照)、次の行を印刷する前にキャリッジリターンを使用して行の先頭に戻ることもできます。行の残りの部分を消去するエスケープシーケンスがあります。これは、現在の行が前の行よりも短い場合に必要です。
nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
el="$(tput el)"; # Clear to the end of the line
tail -n 1 -f nohup.out | while read -r line; do echo -n $'\r'"$el$line"; done;
答え2
ここで使用できますwatch
:
watch -n 0.5 -e "tail -n 1 nohup.out"
編集する:(-e
エイリアス--exec
)オプションがここに適しているようです。特に、非常に小さな間隔で実行することが目標である場合、watch
各サイクル内で実行することによって生じるオーバーヘッドが減少します。sh -c
watch
答え3
特定があるXterm制御シーケンスこれを使用して、端末がスクロールする行数を制限できます。 「スクロールエリアの設定」を探します。しかし、少し汚れています。後で端末をリセットする必要があります。
nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
clear; echo -n $'\e[1;2r'; tail -f nohup.out | grep --line-buffered .
# The "grep" line is to ensure a single line; you can also use "awk 1" or "sed" etc.
答え4
出力が現在の端末ウィンドウ全体を占有しないようにするには、単純なwhile
ループを使用できます。
while true; do
XXX=$( tail -n1 my.log )
echo -en " \r$XXX\r"
sleep 0.5
done; echo