В данном конкретном случае я хотел бы добавить подтверждение в Bash для
Ты уверен? [Y / N]
для Mercurial hg push ssh://username@www.example.com//somepath/morepath
, который на самом деле псевдоним. Существует ли стандартная команда, которая может быть добавлена к псевдониму для достижения этого?
Причина в том, что hg push
и hg out
может звучать похоже, и иногда, когда я захочу hgoutrepo
, я могу случайно напечатать hgpushrepo
(оба псевдонимы).
Обновление: если это может быть что-то вроде встроенной команды с другой командой, такой как: confirm && hg push ssh://...
это было бы здорово ... просто команда, которая может запросить yes
или или no
продолжить с остальными, если yes
.
bash
alias
confirmation
nonopolarity
источник
источник
info bash
: «Практически для любых целей функции оболочки предпочтительнее псевдонимов».ls -l
илиrm -i
?alias rm='rm -i'
. Однажды, когда вам это нужно больше всего, псевдоним не будет там, иboom!
что-то важное будет потеряно.rm -i
, то вы также не можете рассчитывать на наличие сценария оболочки. Так вы всегда печатаетеrm -i
каждый раз?rm
и ожидать-i
поведение, тогда однажды псевдоним не будет найден (по какой-то причине он сбрасывается или не устанавливается, или вы работаете в другой системе). ) и вы печатаете,rm
и он сразу же удаляет вещи без подтверждения. К сожалению! Тем не менее, если вы сделаете псевдоним,alias askrm='rm -i'
то все будет в порядке, поскольку вы получите ошибку «команда не найдена».Ответы:
Это более компактные и универсальные формы ответа Хэмиша . Они обрабатывают любую смесь прописных и строчных букв:
Или, для Bash> = версия 3.2:
Примечание. Если
$response
это пустая строка, она выдаст ошибку. Чтобы исправить, просто добавить кавычки:"$response"
. - Всегда используйте двойные кавычки в переменных, содержащих строки (например: предпочитайте использовать"$@"
вместо$@
).Или Bash 4.x:
Редактировать:
В ответ на ваши изменения вы можете создать и использовать
confirm
команду, основанную на первой версии в моем ответе (она будет работать аналогично двум другим):Чтобы использовать эту функцию:
или
источник
not equal to
второй пример, вам следует привести$response
переменную. Например:if [[ ! $response =~ ^([yY][eE][sS]|[yY])$ ]]
.=~
как это оператор совпадения с регулярным выражением.Вот примерно фрагмент, который вы хотите. Позвольте мне узнать, как направить аргументы.
Берегись
yes | command name here
:)источник
Подтверждения легко обойти с помощью возврата каретки, и я считаю полезным постоянно запрашивать действительные данные.
Вот функция, чтобы сделать это легко. «неверный ввод» отображается красным, если Y | N не получено, и пользователю снова предлагается запрос.
Вы можете изменить приглашение по умолчанию, передав аргумент
источник
Чтобы избежать явной проверки этих вариантов 'yes', вы можете использовать оператор регулярного выражения bash '= ~' с регулярным выражением:
Это проверяет, начинается ли пользовательский ввод с 'y' или 'Y' и сопровождается нулем или более 'es'.
источник
Это может быть взломом:
как в вопросе В Unix / Bash, является ли "xargs -p" хорошим способом запросить подтверждение перед выполнением какой-либо команды?
мы можем использовать,
xargs
чтобы сделать работу:конечно, это будет установлено как псевдоним, как
hgpushrepo
Пример:
источник
Добавьте следующее в ваш файл / etc / bashrc. Этот сценарий добавляет резидентную «функцию» вместо псевдонима «подтверждение».
источник
$response
и,$@
чтобы избежать ошибок, есть лишние точки с запятой, и*
условие должно возвращаться, а не выходить.Это может быть слишком коротким, но для моего личного использования, это прекрасно работает
read -n 1
Просто читает один символ. Не нужно нажимать ввод. Если это не «n» или «N», предполагается, что это «Y». Простое нажатие клавиши ввода также означает Y.(что касается настоящего вопроса: создайте сценарий bash и измените псевдоним так, чтобы он указывал на этот сценарий, а не на то, на что он указывал ранее)
источник
источник
Не нужно нажимать ввод
Вот более длинный, но многократно используемый и модульный подход:
0
= да и1
= нетzsh
иbash
.По умолчанию «нет» при нажатии Enter
Обратите внимание, что
N
заглавная. Здесь нажимается ввод, принимая значение по умолчанию:Также обратите внимание, что это
[y/N]?
было автоматически добавлено. По умолчанию «нет» принимается, поэтому ничего не отображается.Повторяйте запрос, пока не получите правильный ответ:
По умолчанию «да» при нажатии Enter
Обратите внимание, что
Y
заглавная:Выше я просто нажал клавишу ввода, поэтому команда запустилась.
Нет по умолчанию enter- требуется
y
илиn
Здесь
1
или ложь была возвращена. Обратите внимание, нет заглавных букв в[y/n]?
Код
источник
Ну, вот моя версия
confirm
, модифицированная от версии Джеймса:Эти изменения:
local
для предотвращения столкновения имен переменныхread
использовать$2 $3 ...
для контроля его действия, так что вы можете использовать-n
и-t
read
выйдет неудачно,echo
перевод строки для красотыGit on Windows
только имеетbash-3.1
и не имеетtrue
илиfalse
, так что используйтеreturn
вместо этого. Конечно, это также совместимо с bash-4.4 (текущим в Git для Windows).источник
Эта версия позволяет вам иметь более одного случая
y
илиY
,n
илиN
Дополнительно: повторяйте вопрос до тех пор, пока не будет предоставлен вопрос для утверждения.
По желанию: игнорировать любой другой ответ
Опционально: выйдите из терминала, если хотите
Обратите внимание и на это: в последней строке этой функции очистите переменную REPLY. В противном случае, если вы
echo $REPLY
увидите, что он все еще установлен, пока вы не откроете или не закроете свой терминал или не установите его снова.источник
Поздно к игре, но я создал еще один вариант
confirm
функций из предыдущих ответов:Чтобы использовать это:
Особенности:
ошибки:
echo -en
работает,bash
но может потерпеть неудачу в вашей оболочкеecho
илиxargs
источник
Пытаться,
источник
Это не просто «спрашивать да или нет», а просто взломать: псевдоним «
hg push ...
не к»,hgpushrepo
а кhgpushrepoconfirmedpush
тому времени, когда я смогу разобрать все это, левый мозг сделал логичный выбор.источник
TAB
ключ!Не то же самое, но идея, которая работает в любом случае.
Вывод:
опять? Да / Нет
Снова? Да,
опять что-нибудь ? Да / Нет 7
Опять? Да и
снова? Да / нет nsijf
$
Теперь проверяет только 1-й символ чтения $ i.
источник
Ниже код сочетает в себе две вещи
shopt -s nocasematch, который позаботится о регистронезависимости
и если условие, которое будет принимать оба входа либо вы передаете да, да, да, у.
shopt -s nocasematch
if [[sed-4.2.2. $ LINE = ~ (yes | y) $]]
затем выйдите из 0
фи
источник
Вот мое решение, которое использует локализованное регулярное выражение. Таким образом, на немецком языке также «j» для «Ja» будет интерпретироваться как «да».
Первый аргумент - это вопрос, если вторым аргументом является «y», то да будет ответом по умолчанию, иначе нет будет ответом по умолчанию. Возвращаемое значение равно 0, если ответ «да», и 1, если ответ «нет».
Вот основное использование
источник