Почему у cp нет индикатора выполнения, такого как wget?

55

Обратите внимание, что я не спрашиваю, как . Я уже знаю варианты, как pvи rsync -P.

Я хочу спросить, почему не cpреализован индикатор выполнения, по крайней мере, как флаг?

Lamnk
источник
7
Как насчет "Автор не чувствует в этом необходимости"?
phunehehe
7
Для читателей, которые не знают pvи rsync -P, см. Перемещение файлов с индикатором выполненияодном из ответов приведен патч, на cpкотором отображаетсяcp -g индикатор прогресса).
Жиль "ТАК - перестань быть злым"
2
Лучше всего спросить о них в новом (с 2010 года) списке рассылки пользователей coreutils.
Фахим Митха

Ответы:

57

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

Безотносительно причины традиция показа только полезных сообщений вошла в мир Unix. Современные инструменты иногда вводят индикаторы выполнения; в случае rsync основной мотивацией является то, что rsync часто выполняется по сети, и сети намного более ненадежны, чем локальные диски, поэтому индикатор выполнения более полезен. То же самое относится и к Wget.

Жиль "ТАК - перестань быть злым"
источник
6
Этот. И cpвосходит к началу 1970-х годов: это настолько традиционный, насколько вы можете получить.
dmckee
3
@dmckee Тогда почему можно ddдавать заявления о прогрессе? ddвосходит к 1966 году (OS / 360). Инструменты Unix могут быть многословными, если пользователь хочет, чтобы они были многословными, но, к сожалению, вы не можете сказать, каким должен быть многословный cp (есть только один дополнительный уровень многословия:) -v.
Таффер
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 Viewer ( progressранее известный как cv), для отображения статуса любого процесса в системе.

Падрейг Брейди
источник