時間を追跡するスクリプトがあります。
コンソールに出力を印刷すると、次の結果が表示されます。
0 Days, 00:00:33
txtファイルとして保存すると、次のような結果が得られます。
^[[2K
0 Days, 00:00:33
パスワード:
now=$(date +%s)
diff=$(($now - $begin))
mins=$(($diff / 60))
secs=$(($diff % 60))
hours=$(($diff / 3600))
days=$(($diff / 86400))
printf "\33[2K\r%3d Days, %02d:%02d:%02d" $days $hours $mins $secs
printf "\33[2K\r%3d Days, %02d:%02d:%02d" $days $hours $mins $secs >> test.txt
それはどこから来たのです^[[2K
か?私はこれがprintfのフォーマットに関連していると思います。
ここでprintfの内容を読んだ。http://wiki.bash-hackers.org/commands/buildin/printf。しかし、私は賢明ではありません…
ベストアンサー1
printf
コマンドにエスケープ制御シーケンスがありますprintf "\33[2K.....
(例:\e[2K
行をクリア)。これは端末の制御コマンドでなければならず、端末装置でのみ理解して実行できます。
端末内でスクリプトを対話的に実行すると、端末はシーケンスを正しく解釈します。コマンドの出力をファイルに保存すると、現在のシーケンスを解釈する内容がないため、シーケンスは文字通り処理されます。
今これを行う:
cat test.txt
出力を印刷する前に、端末がシーケンスを再度正しく解釈することがわかります。