awk буйругун иштеп чыгуу файлын өркүндөтүү

Давайте проанализируем вашу команду:

yes n | (ls | xargs -n1 -p rm)

Конвейер ls | xargs -n1 -p rm имеет ls , читающий стандартный ввод, но имеет стандартный вывод, перенаправленный на xargs , который принимает его как стандартный ввод, а стандартный вывод не изменяется.

Теперь вы отправляете вывод yes в этот конвейер. Поскольку стандартный ввод этого конвейера идет в ls , который даже не читает его, xargs не видит ничего из этого.

Теперь очевиден вопрос: как xargs может спросить вас, выполнять ли команду? В конце концов, его стандартный ввод (где программы обычно читают действия пользователя) перенаправлен на чтение вывода ls !

Ответ заключается в том, что xargs обходит механизм перенаправления для этих вопросов, просто открывая файл терминала / dev / tty напрямую. Поэтому перенаправление файлов не влияет на ввод подтверждения.

Для ввода в xargs вам понадобится программа, которая может представить процесс с помощью терминального устройства, управляемого программой. Очень мощной (но и довольно сложной) такой программой является expect . К сожалению, я не знаю более простого способа добиться желаемого.

2
27.11.2017, 13:54
0 ответов

Теги

Похожие вопросы