ДА или НЕТ? Давай разберёмся!

Запускай:

cd /tmp
touch bashdays.txt
rm -i bashdays.txt

Получаем интерактивный запрос:

rm: remove regular empty file 'bashdays.txt'?

Выбор зависит от потребности. Либо да, либо нет. Но что вводить? Очевидно же — y или n.

Справедливо. Но что, если… Запускаем:

locale -k noexpr yesexpr

Выхлоп:

noexpr="^[-0nNНн]"
yesexpr="^[+1yYДд]"

Это все возможные варианты, которыми ты можешь воспользоваться. Если вместо «y» ты введёшь знак «+» — файл удалится.

Аналогично можно ввести 0 или 1. Либо «Д» или «Н».

Не везде из коробки прописаны такие регулярки, например на англоязычной Ubuntu — хуй с маслом.

noexpr="^[nN]"
yesexpr="^[yY]"

Функция, оценивающая ответ пользователя, учитывает локализацию.

Для подтверждения или отмены может быть использован любой символ в квадратных скобках из вывода вышеприведённой команды.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
А любой символ, не совпадающий с символами из набора yesexpr, будет равносилен отмене, в том числе и пустой ввод.

Как на это можно повлиять?

Всё это забиндено в файлах, которые лежат в папке /usr/share/i18n/locales.

Например, в файле ru_RU есть такое:

LC_MESSAGES
yesexpr "^[+1yY<U0414><U0434>]"
noexpr  "^[-0nN<U041D><U043D>]"
yesstr  "<U0434><U0430>"
nostr   "<U043D><U0435><U0442>"
END LC_MESSAGES

Тут присутствуют как раз «0» и «1» / «+» и «-».

Если хочется упороться, можешь собрать свою локаль и добавить свои символы в регулярку:

cp /usr/share/i18n/locales/ru_RU ~/my_ru_RU
localedef -f UTF-8 -i ~/my_ru_RU ru_RU.UTF-8

После первой команды нужно отредактировать файл ~/my_ru_RU и затем запускать вторую команду.

Такие вот перлы и приколы. Изучай.

Многие этого ждали, завтра закину анонс про личное наставничество и обучение в рамках проекта Linux Factory.