$SLS_DEBUG_TEXT
раскрывается слишком поздно, после этапа, на котором оболочка в противном случае обработала бы его значение как присвоение. Поэтому вместо этого значение переменной рассматривается как команда.
Вместо этого вы могли бы использоватьenv
:
SLS_DEBUG_TEXT='SLS_DEBUG=*'
env "$SLS_DEBUG_TEXT" sls create_domain -v "$AWS_PROFILE_FLAG" --stage "$STAGE"
Обратите внимание на заключение в кавычки каждого раскрытия переменной .
Если SLS_DEBUG_TEXT
может быть пустым или неустановленным, вышеуказанное приведет к ошибке, поскольку env
попытается выполнить команду без имени.
Чтобы обойти это, вы можете вместо этого использовать
SLS_DEBUG_TEXT='SLS_DEBUG=*'
env ${SLS_DEBUG_TEXT:+"$SLS_DEBUG_TEXT"} sls create_domain -v "$AWS_PROFILE_FLAG" --stage "$STAGE"
${SLS_DEBUG_TEXT:+"$SLS_DEBUG_TEXT"}
расширится до "$SLS_DEBUG_TEXT"
, если эта переменная установлена и не -пуста. В противном случае он превратился бы в ничто (, даже в пустую строку, как в случае с"$SLS_DEBUG_TEXT"
).
Также обратите внимание, что если у вас есть SLS_DEBUG_TEXT='SLS_DEBUG=* '
(, как в вашем коде ), пробел после *
станет частью значения SLS_DEBUG
в среде процесса sls
. Я не знаю, задумано это или нет.
Я также заметил, что сообщение об ошибке, которое вы цитируете, гласит
./sls-deploy.sh: line 110: SLS_DEBUG_TEXT: command not found
Для меня это означает, что вы используете имя переменной без $
перед ним в какой-то момент скрипта. Это может быть совершенно не связано с основной проблемой, которая у вас была. Код, который вы показываете , вместо этого вызовет ошибку
./sls-deploy.sh: line NNN: SLS_DEBUG=*: command not found
Используйте один из многих инструментов резервного копирования Linux, которые работают с файловыми системами ZFS точно так же, как и с любой другой файловой системой. Вы по-прежнему можете извлечь выгоду из ZFS, создавая резервные копии моментальных снимков, а не текущего (развивающегося )состояния файловой системы. Преимуществом является согласованное состояние всех файлов в резервной копии.