Harap dicatat bahwa saya tidak bertanya bagaimana . Saya sudah tahu opsi seperti pv
dan rsync -P
.
Saya ingin bertanya mengapa tidak cp
menerapkan bilah kemajuan, setidaknya sebagai bendera?
wget
cp
architecture
Lamnk
sumber
sumber
pv
danrsync -P
, lihat memindahkan file dengan progress bar ( salah satu jawaban mengutip tambalancp
sehinggacp -g
memberikan indikator kemajuan).Jawaban:
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.
sumber
cp
kembali ke awal tahun 1970-an: ini adalah tradisional seperti yang Anda dapatkan.dd
memberikan pernyataan kemajuan?dd
kembali 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
.dd
aneh 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 seperticp
di mana dalam kebanyakan kasus Anda hanya akan berkedip dan mendapatkan kembali prompt Anda.Di dunia unix, setiap alat dirancang untuk melakukan satu pekerjaan dan melakukannya dengan baik. Mengapa
cp
khawatir tentang menghasilkan kemajuan ketika alat lain sepertipv
sudah melakukannya? Dalam nada yang sama, mengapa begitu banyak program membuang barang ke layar tanpa pagination? Karena sudah ada alat untuk pekerjaan itu sepertimore
(atauless
). 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
cp
digunakan 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.
sumber
pv
ada kapancp
ditulis? Ini poin yang bagus, tetapi saya merasa bahwa dalam kasus ini,cp
awalnya sengaja ditulis tanpa hasil kemajuan, tidak ada hubungannya dengan alat lain, hanya alasan lain yang Anda dan Gilles kutip.cp
ada 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.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 sebagaicv
) untuk menampilkan status dari setiap proses pada sistem.sumber