web-dev-qa-db-ja.com

cpにwgetのような進行状況バーがないのはなぜですか?

howは質問しないことに注意してください。 pvrsync -Pなどのオプションはすでに知っています。

私は尋ねたいなぜ少なくともフラグとしてプログレスバーをcp実装していない?

58
Lamnk

UNIXツールの伝統は、何か問題が発生した場合にのみメッセージを表示することです。これは、設計上の理由と実用上の理由の両方だと思います。この設計は、何かがうまくいかなかった場合にそれを明確にすることを目的としています。エラーメッセージが表示され、実際には情報メッセージではありません。実際的な理由は、UNIXのごく初期の段階では、まだ teleprinters ;があったためです。つまり、プログラムからの出力は紙に印刷され、プログレスバーを印刷したくありません。

理由が何であれ、有用なメッセージのみを表示するという伝統は、UNIXの世界で定着しています。現代のツールは時々プログレスバーを導入しました。 rsyncの場合、主な動機はrsyncがネットワーク経由で実行されることが多く、ネットワークはローカルディスクよりもかなり不安定であるため、プログレスバーの方が便利です。同じ理由がwgetにも当てはまります。

UNIXの世界では、各ツールは1つの仕事をうまくこなせるように設計されています。 cpのような別のツールがすでにそれを実行しているのに、なぜpvは進行状況の出力について心配するのですか同じように、なぜ多くのプログラムがページ分割なしで画面にデータをダンプするのですか? more(またはless)などのそのジョブ用のツールがすでにあるためです。ファイルの編集を必要とするほとんどのプログラムがエディタを提示せず、代わりに$EDITOR代わりに?それは、誰もが設計された1つのタスクを実行し、ユーザーはすべてのタスクにお気に入りのエディターを使用するためです。

接線的に、ほとんどのシェルプログラムは、出力を他のシェルプログラムにパイプするように設計されています。彼らが与える可能性が高い唯一の出力は、チェーン内の次のコマンドで解析するのに役立つものです。 cpのようなプログラムは、スクリプトで使用されるほか、端末から手動で使用されるため、その出力は、終了コードと失敗または成功したファイルのリストに集中しています。

常にツールを組み合わせて目的の効果を達成することを期待してください。

16
Caleb

これは、cpにプログレスバーオプションを追加することに対する賛成論と反対論がある、これらの限界的なものの1つです。反対の主な議論は、あなたはあなたがあなたが進歩を知りたいことを前もって知ることができないかもしれないということです。 Ctrl-T/SIGINFOはこの目的のためにBSDで利用可能であり、GNU/Linuxプラットフォームで利用可能になった場合、cpでプログレスバーロジックをトリガーする理由がさらに増える可能性があります。それまでの間、より一般的な解決策は theCoreutils Progress Viewerprogress、以前知っていた)のような別のツールを使用することですas cv システム上のプロセスのステータスを表示します。

3
Pádraig Brady