Хостинг

Как автоматически отвечать на Да или Нет в командах Linux-Unix

Как автоматически отвечать на Да или Нет в командах Linux-Unix

Как автоматически отвечать «Yes» или «No» в Linux/Unix

1 мая 2024 г.

Внимание! Автоматическое подтверждение может привести к безвозвратной потере данных. Всегда проверяйте, что именно отправляете программе.

1. Команда yes

Утилита yes бесконечно выводит указанную строку (y по умолчанию) и подаёт её в STDIN другой программе. Подходит, когда подтверждений много.

# отвечать «yes» на все вопросы
yes | <команда>

# отвечать «no»
yes n | <команда>

# пример: rm -i без вопросов
yes | rm -i *.log

2. Разовое подтверждение через echo, printf или «here-string»

# одно «y»
echo y | <команда>

# два последовательных ответа
printf 'y\ny\n' | <команда>

# «here-string»
<команда> <<< $'y\n'

3. Встроенные флаги «без вопросов»

Многие программы уже имеют собственный неинтерактивный режим:

  • apt install -y

  • dnf remove -y

  • rm -f — «force», не спрашивать подтверждений

  • cp -f — перезаписывать без диалога

  • curl -fS — «fail silently»

Всегда смотрите --help или man — явный режим надёжнее, чем «подсовывать» ответы через yes.

4. expect, pexpect, coprocess — для сложных сценариев

Если диалог многошаговый или формат вопроса меняется, используйте инструменты автоматизации:

#!/usr/bin/expect -f
spawn some_interactive_tool
expect "Do you want to continue?" { send "y\r" }
expect eof

Альтернативы: Python-модуль pexpect, coproc (Bash 4+), Ansible + expect-модуль и др.

5. Быстрые примеры «в одну строку»

# «no» на каждый запрос rm -rI
yes n | rm -rI Downloads/

# установить пакеты без подтверждения
sudo apt-get -y install nginx

# подтвердить перезапись файла при cp
echo y | cp -i src.conf /etc/myapp.conf

# автоматизация mysql_secure_installation (используем expect)
expect -c '
spawn mysql_secure_installation
expect "enter for none": { send "\r" }
expect "Y/n"           : { send "y\r" }
interact
'

6. Краткая памятка

  • yesилиecho y — универсально.

  • Для одного-двух ответов достаточно echo/printf.

  • Если есть ключ -y, -f, --quiet — используйте его.

  • Сложные диалоги ➜ expect/pexpect.

Если удаление уже работает, вернуть стёртые файлы зачастую невозможно без резервной копии. Ниже описано, как остановить процесс и минимизировать потери.

1. Быстрое прерывание в активном терминале: Ctrl + C

Находясь в том же окне, где запущена команда yes | rm …, нажмите Ctrl + C. Сигнал SIGINT отправится сразу всему конвейеру, и завершатся оба процесса: yes и rm.

2. Процесс запущен в фоне или в другом окне

  • Выясните PID’ы:
ps -o pid,cmd | grep -E 'rm |yes '
  • Пошлите сигнал прерывания:
kill -INT

или сразу всем одноимённым процессам:

pkill -INT rm   # прервать все rm
pkill -INT yes  # прервать все yes

3. «Заморозить», затем убить: Ctrl + Z

Если Ctrl + C не помогает:

  • Нажмите Ctrl + Z — процессы попадут в состояние stopped.

  • Посмотрите список фоновых заданий:

jobs -l
  • Окончательно завершите:
kill %1           # вместо 1 — номер job
# при необходимости
kill -9 %1        # принудительное завершение

4. Остановить только поток «yes»

Иногда достаточно прекратить генерацию «y», чтобы rm -i снова стал ждать ваш ответ:

pkill yes     # или killall yes
# теперь можно вручную отвечать «n» или нажать Ctrl + C

5. Восстановление уже удалённых данных

После остановки проверьте, что именно удалено. Если необходимы попытки восстановления, используйте:

  • extundelete, testdisk, photorec — для ext-файловых систем.

  • Аппаратные/ПО-решения для btrfs/zfs снапшотов, если они были настроены.

  • Бэкап (RSnapshot, Borg, Restic, Time Machine и т. п.).

Гарантировать успех нельзя: чем раньше остановлено удаление и меньше перезаписано данных, тем выше шанс спасти файлы.

6. Как не допустить повторения

  • Вместо yes | rm используйте флаг rm -f или безопасный rm -I (спрашивает максимум пару раз).

  • Добавьте алиас в ~/.bashrc:

alias rm='rm -I --preserve-root'
  • Работайте в непроверенных каталогах с помощью trash (trash-cli) или gio trash, чтобы файлы сначала перемещались в корзину.

  • Поддерживайте регулярные резервные копии.

⚠️ Команда rm -rf безвозвратно стирает файлы. Убедитесь, что путь указан верно, и у вас есть резервная копия важного.

1. Почему yes | rmdir menu не удаляет содержимое?

Утилита rmdir умеет удалять только пустые каталоги. Если внутри лежат файлы или подпапки (а в bitrix их обычно множество), rmdir вернёт ошибку. «Подсовывать» ответы через yes бесполезно — вопросов всё равно не задаётся, каталог просто не считается пустым.

2. Удалить только содержимое, оставить сам каталог

Иногда нужно очистить папку, но оставить её на месте:

# вариант 1: звёздочка
rm -rf bitrix/*

# вариант 2: безопаснее при пробелах в именах
rm -rf bitrix/{.,}* 2>/dev/null

Первая команда стирает обычные файлы и подкаталоги. Вторая захватывает скрытые («точечные») элементы. Подстановку {.,}* поддерживает Bash 4+.

3. Удалить каталог вместе со всем содержимым

rm -rf bitrix       # быстрый и без вопросов

Ключи расшифровываются так:

  • -r / --recursive — рекурсивно заходить во все подпапки.

  • -f / --force — не спрашивать подтверждения, игнорировать несуществующие файлы.

4. Нужна подстраховка? Интерактивные варианты

Чтобы случайно не стереть лишнего, используйте:

rm -ri bitrix       # спросит перед каждым файлом
rm -rI bitrix       # спросит один раз, если файлов > 3

Система попросит ввести y/n. Так меньше шанс ошибки.

5. Делаем «сухой прогон»

Смотрите, что будет удалено, не затрагивая файлы:

find bitrix -mindepth 1 -print     # покажет всё, что внутри

Если вывод вас устраивает, выполните rm -rf bitrix.

6. Альтернатива: отправить в «корзину»

На рабочих станциях можно вместо жёсткого удаления использовать:

gio trash bitrix            # среды GNOME/GTK
trash put bitrix            # пакет trash-cli (pip / apt)

Так файлы попадают в штатную корзину и их легче восстановить.


Ищете надежного партнера по веб-разработке и автоматизации? Мы помогаем бизнесу расти с помощью современных технологий, автоматизации процессов и экспертного SEO. Свяжитесь с нами, чтобы обсудить вашу задачу.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →