Чому CP не має панелі прогресу, як wget?


55

Зауважте, що я не запитую як . Я вже знаю такі варіанти, як pvі rsync -P.

Хочу запитати, чому не cpзастосовується смуга прогресу, принаймні як прапор?


7
Як щодо "Автор не відчуває потреби в цьому"?
phunehehe

7
Для читачів, які не знають pvі rsync -P, дивіться переміщення файлів з панеллю прогресу ( одна з відповідей посилається на виправлення, cpщо cp -gдає індикатор прогресу).
Жил 'ТАК - перестань бути злим'

2
Краще запитати буде у новому (з 2010 р.) Списку розсилки користувачів coreutils.
Faheem Mitha

Відповіді:


57

Традиція в інструментах Unix - відображати повідомлення лише в тому випадку, якщо щось піде не так. Я думаю, це і з дизайнерських, і з практичних причин. Дизайн покликаний зробити це очевидним, коли щось піде не так: ви отримуєте повідомлення про помилку, і воно не заглушується в не фактично інформативних повідомленнях. Практична причина полягає в тому, що в перші дні Unix ще існували телепринтери ; тобто вихід з програм буде надрукований на папері, і ви не хочете друкувати смужки прогресу.

Незалежно від причини, традиція показувати лише корисні повідомлення застрягла у світі Unix. Сучасні інструменти інколи впроваджували планки прогресу; у випадку rsync основна мотивація полягає в тому, що rsync часто виконується через мережу, а мережі набагато слабкіші, ніж локальні диски, тому панель прогресу є кориснішою. Це ж міркування стосується wget.


6
Це. І cpсягає початку 1970-х: це традиція, як традиційна.
dmckee

3
@dmckee Тоді чому можна ddдавати заяви про прогрес? ddсходить до 1966 року (OS / 360). Інструменти Unix можуть бути багатослівними, якщо користувач хоче, щоб вони були багатослівними, але, на жаль, ви не можете сказати, яким повинен бути багатослівний cp (є лише один додатковий рівень багатослів’я:) -v.
taffer

7
@taffer ddбагато в чому властивий (найбільш очевидно, його синтаксис опцій), оскільки він не з unix, це клон інструменту IBM. Крім того, його в основному використовували для довгих завдань на стрічках, тому повідомлення в ньому говорили вам повернутися з вашої перерви, на відміну від того, cpде в більшості випадків ви просто моргаєте і отримуєте своє швидке повернення.
Жил "ТАК - перестань бути злим"

16

У світі Unix кожен інструмент розроблений для того, щоб виконувати одну роботу і робити це добре. Чому б cpтурбуватися про досягнення прогресу, коли вже використовується інший інструмент pv? Тож, чому так багато програм скидають речі на екран без будь-якої сторінки? Тому що для цієї роботи вже є такі інструменти, як more(або less). Чому більшість програм, які потребують редагування файлів, НЕ представляють вас редактором, а замість цього передають аутсорсинг $EDITOR? Тому що це залишає всіх, хто виконує одне завдання, яке було призначено, і користувач використовує улюблений редактор для всіх завдань.

Тангенціально більшість програм оболонок розроблені таким чином, щоб їх вихід був перенесений на інші програми оболонок. Єдиний вихід, який вони, ймовірно, дають - це речі, які були б корисні для розбору в наступній команді ланцюга. Такі програми cpвикористовуються як в скриптах, так і вручну з терміналу, тому його вихід фокусується навколо коду виходу та списків файлів, які не вдалися чи вдалися.

Завжди розраховуйте на комбінування інструментів для досягнення бажаного ефекту.


3
Чи pvіснували, коли cpписали? Це хороший момент, але я маю відчуття, що в цьому випадку cpспочатку було навмисно написано без прогресу, нічого спільного з іншими інструментами, тільки з інших причин, які ви та Гілз наводите.
Каскабель

1
@Jefromi: Я не впевнений, що це має значення. Це не історичне питання про те, чому cpбув один із способів, коли він був вперше закодований. Питання в тому, чому це так зараз . Минуло багато років, і хтось міг би додати функціонал, але явно вирішив цього не робити. Я впевнений, що в цьому рішенні є наявність інших інструментів.
Калеб

3

Це одна з тих граничних речей, де є аргументи «за» і «проти» додавання варіанту рядка прогресу до cp. Основним аргументом проти є те, що ви можете достроково не знати, що хочете знати прогрес. Ctrl-T / SIGINFO доступний на BSD для цієї мети, і якщо це стане доступним на платформах GNU / Linux, то може бути більше причин для того, щоб запустити логіку смуги прогресу в cp. У той же час більш загальне рішення використовувати окремий інструмент , як в Coreutils перегляду Прогрес ( progress, раніше відомий як cv) , щоб відобразити стан будь-якого процесу в системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.