2015-01-12 2 views
0

Я смущен поведением о том, как сделать Баш лечить отключенную переменный, используемые в качестве команды оболочки, как показано ниже:что будет колотить делать с отключенным переменной

rm -rf /$TO_BE_REMOVED

, что будет делать, если у меня есть не определена переменная TO_BE_REMOVED.

+3

Если вы работаете от пользователя root, все будет эффективно работать с фейерверками, используя 'rm -rf /' – anubhava

+1

. Я бы этого не сделал, если бы я был вами :-) – paxdiablo

ответ

4

Если вы это сделаете, команда, выполненная эффективно попытается удалить /, что очень, очень плохо. Я имею в виду, что это, скорее всего, будет неэффективным (если вы не используете root), но все равно это будет очень плохо.

Вы можете избежать многих из этих видов ошибок в Bash автоматически с помощью одной простой команды:

set -eu 

Если положить, что в верхней части Баш скрипт, интерпретатор остановится и возвращает код ошибки, если ваш скрипт когда-либо вызывает команду, которая возвращает ошибку, которая не проверяется (это часть -e), или если она использует неопределенную переменную (часть -u). Это делает Баша значительно более безопасным.

+2

Или, если вам нравится, что код будет немного больше (по цене дольше), 'set -o errexit -o nounset'. – l0b0

+0

Итак, кажется, что bash будет игнорировать неустановленные переменные и просто сделать их стертыми в командах? – andy

+0

@andy: Да, вроде как. –

Смежные вопросы