watchコマンドから変数を再ロードできますか?

watchコマンドから変数を再ロードできますか?

私の仕事にはいくつかのデータ処理が含まれています。タスクの1つは、一連のディレクトリを「フラット化」することです。目次一時的に)DirFlatという名前の新しい場所にコピーします。

時間がかかることがあります(30分 - > 2〜3時間)!進捗状況を確認したいので、find Dir -type f|wc -lファイルの数を取得してから(これを呼び出す$Filenum)、私が書いた非常に短いコマンドを実行しました(私のラップトップで再入力しましたが、おそらくコピーエラーだったでしょう。要点):

echo $(echo "($ls DirFlat |wc -l)*100/$FileNum"|bc) "%" $(date)

ただし、実行すると、watch -n 100 "!!"エコーされた出力を取得し、その出力を印刷し続けます(日付は変わりません)。

これを使用してBASHで変数を更新したり、内部変数の割り当てを再実行したりできますか?これがいくつかのタスクを自動化するのに役立つことを願っています。

ベストアンサー1

比較:

$ watch -n 1 "echo $(date)"
Every 1.0s: echo Sat Apr 27 03:10:50 CEST 2013

$ watch -n 1 'echo $(date)'
Every 1.0s: echo $(date)

あなたがすることはandを実行しecho "($ls DirFlat |wc -l)*100/$FileNum"|bcdate各コマンドの出力をシェルコマンドに置き換えてwatch -n 100 "echo $(…) % $(…)"から実行するだけです。コマンドが親シェルから拡張されるのを防ぎ、代わりに文字列として渡してwatch実行する必要があります。コマンドの周囲に二重引用符の代わりに一重引用符を使用します。

おすすめ記事