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


55

方法を尋ねないので注意してください。pvやなどのオプションは既に知っていますrsync -P

少なくともフラグとしてプログレスバーを実装しない理由を尋ねたいのcpですが。


7
「著者はその必要性を感じていない」のはどうですか?
プネヘヘ

7
pvおよびを知らない読者については、進行状況バーでファイルを移動するをrsync -P参照してください(回答の1つは、進行状況インジケーターを提供するパッチを引用しています)。cpcp -g
ジル 'SO-悪であるのをやめる'

2
質問するより良い場所は、新しい(2010年以降)coreutilsユーザーメーリングリストです。
ファヒムミタ

回答:


57

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

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


6
この。そしてcp1970年代初期にさかのぼります:それはあなたが得ることができるのと同じくらい伝統的な試合です。
dmckee

3
@dmckeeでは、なぜdd進行状況を説明できるのでしょうか?dd1966(OS / 360)に戻ります。Unixツールは、ユーザーが冗長にすることを望む場合には冗長になる可能性がありますが、残念ながら、どのように冗長cpを使用するかは言えません(追加の冗長レベルは1つだけです-v)。
タッファー

7
@taffer ddはunixのものではなく、IBMツールのクローンであるため、多くの点で独特です(最も明らかに、そのオプション構文)。また、テープ上の長いタスクに主に使用されていたためcp、ほとんどの場合、点滅してプロンプトを戻す場合とは異なり、そのメッセージは休憩から戻るように指示しました。
ジル「SO-悪であるのをやめる」

16

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

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

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


3
なかったpv時に存在してcp書かれていましたか?良い点ですが、この場合、cp元々は進捗状況の出力なしで意図的に書かれたもので、他のツールとは何の関係もありません。
カスカベル

1
@ジェフロミ:それが重要かどうかはわかりません。これは、なぜcp最初にコーディングされたときの1つの方法であったかについての歴史的な問題ではありません。問題は、なぜそれが今のようになっているのかです。何年も経ち、誰かが機能を追加できたかもしれませんが、明らかにしないことを決めました。他のツールの可用性がその決定に影響を与えると確信しています。
カレブ

3

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.