Mengapa cp tidak memiliki bilah kemajuan seperti wget?

55

Harap dicatat bahwa saya tidak bertanya bagaimana . Saya sudah tahu opsi seperti pvdan rsync -P.

Saya ingin bertanya mengapa tidak cpmenerapkan bilah kemajuan, setidaknya sebagai bendera?

Lamnk
sumber
7
Bagaimana dengan "Penulis tidak merasa perlu untuk itu"?
phunehehe
7
Untuk pembaca yang tidak tahu pvdan rsync -P, lihat memindahkan file dengan progress bar ( salah satu jawaban mengutip tambalan cpsehingga cp -gmemberikan indikator kemajuan).
Gilles 'SO- berhenti bersikap jahat'
2
Tempat yang lebih baik untuk bertanya adalah pada milis pengguna coreutils baru (sejak 2010).
Faheem Mitha

Jawaban:

57

Tradisi di alat unix adalah untuk menampilkan pesan hanya jika terjadi kesalahan. Saya pikir ini karena alasan desain dan praktis. Desain ini dimaksudkan untuk memperjelas ketika ada masalah: Anda mendapatkan pesan kesalahan, dan itu tidak tenggelam dalam pesan yang tidak benar-benar informatif. Alasan praktisnya adalah bahwa pada masa-masa awal unix, masih ada teleprinter ; yaitu, output dari program akan dicetak di atas kertas, dan Anda tidak ingin mencetak progress bar.

Apa pun alasannya, tradisi hanya menampilkan pesan berguna telah macet di dunia unix. Alat-alat modern kadang-kadang memperkenalkan progress bar; dalam kasus rsync, motivasi utama adalah bahwa rsync sering dilakukan melalui jaringan, dan jaringan jauh lebih flakier daripada disk lokal, sehingga progress bar lebih bermanfaat. Alasan yang sama berlaku untuk wget.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6
Ini. Dan cpkembali ke awal tahun 1970-an: ini adalah tradisional seperti yang Anda dapatkan.
dmckee
3
@ dmckee Lalu mengapa bisa ddmemberikan pernyataan kemajuan? ddkembali ke 1966 (OS / 360). Alat Unix dapat menjadi verbose jika pengguna menginginkannya menjadi verbose, tetapi sayangnya Anda tidak bisa mengatakan bagaimana verbose cp akan terjadi (hanya ada satu tingkat verbositas tambahan:) -v.
taffer
7
@taffer ddaneh dalam banyak hal (yang paling jelas, sintaks opsinya) karena bukan dari unix, itu adalah tiruan dari alat IBM. Selain itu, sebagian besar digunakan untuk tugas-tugas panjang pada kaset, sehingga pesannya memberitahu Anda untuk kembali dari istirahat Anda, tidak seperti cpdi mana dalam kebanyakan kasus Anda hanya akan berkedip dan mendapatkan kembali prompt Anda.
Gilles 'SANGAT berhenti menjadi jahat'
16

Di dunia unix, setiap alat dirancang untuk melakukan satu pekerjaan dan melakukannya dengan baik. Mengapa cpkhawatir tentang menghasilkan kemajuan ketika alat lain seperti pvsudah melakukannya? Dalam nada yang sama, mengapa begitu banyak program membuang barang ke layar tanpa pagination? Karena sudah ada alat untuk pekerjaan itu seperti more(atau less). Mengapa sebagian besar program yang membutuhkan pengeditan file TIDAK memberi Anda editor dan alih-alih melakukan outsourcing $EDITOR? Karena itu membuat semua orang melakukan satu tugas yang dirancang untuk mereka lakukan, dan pengguna menggunakan editor favorit mereka untuk semua tugas.

Intinya, sebagian besar program shell dirancang agar outputnya disalurkan ke program shell lainnya. Satu-satunya keluaran yang cenderung mereka berikan adalah hal-hal yang akan berguna untuk diuraikan dalam perintah berikutnya dalam rantai. Program seperti cpdigunakan dalam skrip serta manual dari terminal, sehingga outputnya difokuskan di sekitar kode keluar dan daftar file yang gagal atau berhasil.

Selalu berharap untuk menggabungkan alat untuk mencapai efek yang Anda inginkan.

Caleb
sumber
3
Apakah pvada kapan cpditulis? Ini poin yang bagus, tetapi saya merasa bahwa dalam kasus ini, cpawalnya sengaja ditulis tanpa hasil kemajuan, tidak ada hubungannya dengan alat lain, hanya alasan lain yang Anda dan Gilles kutip.
Cascabel
1
@ Jeffromi: Saya tidak yakin itu penting. Ini bukan pertanyaan historis tentang mengapa cpada satu cara ketika pertama kali dikodekan. Pertanyaannya adalah mengapa begitu sekarang . Sudah bertahun-tahun dan seseorang bisa menambahkan fungsionalitas, tetapi jelas memutuskan untuk tidak melakukannya. Saya yakin ketersediaan faktor alat lain menjadi keputusan itu.
Caleb
3

Ini adalah salah satu hal marjinal di mana ada argumen untuk dan menentang menambahkan opsi progress bar ke cp. Argumen utama yang menentang, adalah bahwa Anda mungkin tidak tahu sebelumnya bahwa Anda ingin mengetahui kemajuannya. Ctrl-T / SIGINFO tersedia di BSD untuk tujuan ini, dan jika itu tersedia pada platform GNU / Linux, maka mungkin ada lebih banyak alasan untuk itu untuk memicu progress bar logic di cp. Sementara itu solusi yang lebih umum adalah dengan menggunakan alat terpisah seperti yang Coreutils Kemajuan Viewer ( progress, sebelumnya dikenal sebagai cv) untuk menampilkan status dari setiap proses pada sistem.

Pádraig Brady
sumber