Какой смысл команды «да»?


40

В yesunix / linux есть команда, которая в основном бесконечно печатает yв stdout. В чем смысл и как это полезно?


Несколько дополнительных возможностей здесь .

1
Возможный дубликат В чем смысл команды `yes`? ... (Пометить это как дубликат, потому что другой, более новый вопрос лучше задать и лучше ответить).
Адитья


Ответы:


42

yes может использоваться для отправки утвердительного (или отрицательного; например, yes n) ответа на любую команду, которая в противном случае запросила бы ее, в результате чего команда запускалась неинтерактивно.

Команду yes вместе с командой head можно использовать для создания файлов большого объема для средств тестирования.

Его также можно использовать для проверки того, насколько хорошо система справляется с высокими нагрузками, поскольку использование yes приводит к 100% использованию процессора для систем с одним процессором (для многопроцессорной системы процесс должен выполняться для каждого процессора). Это, например, может быть полезно для изучения эффективности системы охлаждения системы, когда процессор работает на 100%.

В 2006 году команда yes получила огласку как средство проверки того, не подвержен ли пользовательский MacBook синдромом прерывистого отключения или нет. Запустив команду yes дважды через Терминал под Mac OS X, пользователи смогли максимально использовать центральный процессор своего компьютера и таким образом увидеть, был ли сбой связан с перегревом

через википедию: http://en.wikipedia.org/wiki/Yes_(Unix)


9
Для дополнительного урона попробуйтеyes `yes yes`
sendmoreinfo


о, это хороший стресс-тест. только что попробовал, затем побежал к моему коллеге с просьбой о новом vm xD
Toastgeraet

20

Это может быть спорным мнением, но, на мой взгляд, это ужасное исправление плохого пользовательского интерфейса в инструментах командной строки .

Некоторые инструменты командной строки задают вопросы пользователю с подсказкой и не имеют возможности работать не в интерактивном режиме; представьте, например, что-то вроде

$ frobnicate *
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
...

Поскольку ответ на вопрос взят из стандартного ввода, быстрое решение этой проблемы - приложение, которое выводит строку y\nнепрерывно, что и yesделает. Unix трубы могут быть использованы для отправки этого вывода в качестве входных данных для данной команды.

$ yes | frobnicate

Одна из проблем этого подхода заключается в том, что у yesнего нет возможности проверить вопрос, на который он отвечает:

frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
format device /dev/sda1? (y/n) y
frobnicate file c.txt? (y/n) y

Лучшим решением, если оно доступно, является конкретный вариант для запуска в неинтерактивном режиме, например, rm -fили apt-get -y. Это позволяет кодировать более разумное поведение в приложении.


1
Я прочитал все остальные ответы. Я согласен с вашими полностью WRT уродливых исправить ... хотя это действительно есть действительное использование для тестирования реакции компьютера на высокие нагрузки на процессоре.
Подстановочный

6
Конечно, вы можете использовать проприетарное программное обеспечение «Microsoft Windows» для проверки реакции компьютера на высокую загрузку процессора, но «да» является открытым исходным кодом.
Wildcard

1
Это одно из самых красивых исправлений
Jezzamon

4

Мне нравится использовать, yesкогда я распаковываю несколько файлов .zip, которые содержат один и тот же файл с одинаковым именем, и меня спрашивают, что делать в каждом случае (например, лицензионное соглашение).

yes | for z in *.zip; do unzip "$z"; done 

2

Просто наткнулся на другое использование: любил стирать жесткий диск с другим шаблоном, отличным от нуля (вроде:), dd if=/dev/zero of=/dev/sdd bs=1Mи использовал для этого « да »:

yes UUUUUUUUUUUUU > /dev/sdd


Остерегайтесь, хотя он заполняет диск с Us, но с UUUUUUUUUUUUU\ns. Чтобы заполнить Uс, вам нужно yes '' | tr '\n' U > /dev/sddилиtr '\0' U < /dev/zero > /dev/sdd
Стефан Chazelas

1

Коллега использовал это по-новому для ввода пароля

yes password | passwd

passwdсначала запросит старый пароль, если пользователь не является пользователем root или суперпользователем, и не продолжит работу, пока не будет введен правильный пароль. Так что либо пользователь root, либо passwordстарый пароль, и ничего не изменилось.
Михаил Кониецка

@MichaelKonietzka действительно. Но с условиями, которые вы упомянули, это полезный вариант использования.
frogstarr78

3
За исключением того, что это сохранилось бы в истории открытым текстом. Crazeyyy.
Глено

3
@Gleno в bash, вы можете поставить перед ним пробел, чтобы предотвратить его запись (как в stackoverflow.com/q/640403/118153 )
Iiridayn

2
Кроме того, это приводит к утечке пароля всем локальным пользователям в списке процессов ( psили topв нужный момент).
Федерико Полони
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.