端末の形式が.txt文書の形式と異なります。

端末の形式が.txt文書の形式と異なります。

時間を追跡するスクリプトがあります。

コンソールに出力を印刷すると、次の結果が表示されます。

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

出力を印刷する前に、端末がシーケンスを再度正しく解釈することがわかります。

おすすめ記事