Вы не хотите подавлять все, так как это замедляет ваш скрипт.
И да, есть способ как в php.ini, так и внутри вашего скрипта удалить ошибки (но делать это только тогда, когда вы находятся в живой среде и записывают ваши ошибки из php)
И вы можете прочитать это для версии php.ini, отключив ее.
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
# do dangerous stuff
fi
Я включил предложение levislevis85 (спасибо!) И добавил параметр -n
в read
, чтобы принять один символ без необходимости нажимать Введите . Вы можете использовать один или оба из них.
Кроме того, отрицательная форма может выглядеть так:
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell
fi
Однако, как указал Эрих, при некоторых обстоятельствах, таких как синтаксическая ошибка, вызванная запуском сценария в неправильном shell, инвертированная форма может позволить сценарию продолжить «опасные вещи». Режим отказа должен способствовать наиболее безопасному исходу, поэтому следует использовать только первый неотрицательный , если
.
Пояснение:
Команда read
выводит приглашение ( ] -p "подсказка"
) затем принимает один символ ( -n 1
) и принимает обратную косую черту буквально ( -r
) (в противном случае чтение
будет рассматривать обратную косую черту как escape и ждать второго символа). Переменная по умолчанию для чтения
для сохранения результата - $ REPLY
, если вы не укажете такое имя: read -p "my prompt" -n 1 - r my_var
Оператор if
использует регулярное выражение, чтобы проверить, соответствует ли символ в $ REPLY
( = ~
) верхнему или нижнему регистру "Y ". В используемом здесь регулярном выражении говорится: «строка, начинающаяся ( ^
) и состоящая исключительно из одного из списка символов в выражении в квадратных скобках ( [Yy]
) и заканчивающемся ( $
) ". Якоря ( ^
и $
) предотвращают сопоставление более длинных строк. В этом случае они помогают усилить ограничение в один символ, установленное в команде read
.
В инвертированной форме используется логический оператор «не» (!
) для соответствия ( ] = ~
) любой символ, кроме «Y» или «y». Альтернативный способ выразить это менее читабелен и, на мой взгляд, не так ясно выражает намерение в данном случае. Однако это будет выглядеть так: if [[$ REPLY = ~ ^ [^ Yy] $]]
Попробуйте встроенную оболочку read
:
read -p "Continue (y/n)?" CONT
if [ "$CONT" = "y" ]; then
echo "yaaa";
else
echo "booo";
fi
То, что я нашел в другом месте, есть ли лучшая версия?
read -p "Are you sure you wish to continue?"
if [ "$REPLY" != "yes" ]; then
exit
fi
#!/bin/bash
echo Please, enter your name
read NAME
echo "Hi $NAME!"
if [ "x$NAME" = "xyes" ] ; then
# do something
fi
Это короткий сценарий для чтения в bash и вывода результатов.
qnd: используйте
read VARNAME
echo $VARNAME
для однострочного ответа без поддержки чтения. Затем проверьте $ VARNAME, как хотите.
echo are you sure?
read x
if [ "$x" = "yes" ]
then
# do the dangerous stuff
fi
use case/esac.
read -p "Continue (y/n)?" choice
case "$choice" in
y|Y ) echo "yes";;
n|N ) echo "no";;
* ) echo "invalid";;
esac
advantage: