Местонахождение My Co -Хост вытащил сервер и переустановил все модули DIMM.
Этого не было уже 3 дня. Может показаться, что по мере того, как соединение замедляется из-за отсутствия надежного соединения, все больше и больше данных становятся поврежденными, пока система не выйдет из строя, пытаясь пропустить неверные адреса. Плохое соединение также могло привести к падению напряжения памяти, вызывая колебания. Напряжения оставались в пределах диапазона, но становились неустойчивыми, когда это начиналось.
Расширения не применяются рекурсивно. Это сделало бы невозможным обработку произвольных данных со встроенными знаками доллара. (Связанный с этим вопрос заключается в том, что кавычки, перенаправление и другие операторы также являются обычными символами после раскрытия.)
Обычной традицией является использование подобных файлов конфигурации в качестве реального сценария оболочки, поэтому (аналогично файлам в Debian /etc/default
), поэтому файл будет
DIR="${HOME}/test/tmp"
и вы бы прочитали это с
. configfile
хотя, конечно, у этого есть проблема, заключающаяся в том, что файл является полным сценарием оболочки, должен соответствовать синтаксису оболочки, а конфигурация может запускать произвольные команды.
Другой возможностью было бы запустить файл через envsubst
, например.с файлом в вашем вопросе envsubst < configfile
выведет:
DIR = "/home/me/test/tmp"
или вы можете использовать envsubst '$HOME $OTHER $VARS'
, чтобы расширить некоторые конкретные.
Обратите внимание, что в отличие от сценария оболочки, envsubst
не считывает никаких назначений из входного файла. Например. значение ROOTPATH
, используемое во второй строке, является тем, которое envsubst
получает из среды, оно не имеет ничего общего с «назначением» в первой строке:
ROOTPATH=/something/$USER
LOGPATH=$ROOTPATH/logs
Это излишне сложный способ получить то, что вам нужно! Все, что вам нужно, это (Я также изменил имена переменных на строчные, пожалуйста, избегайте использования CAPS для переменных сценария оболочки, поскольку они используются для переменных среды, и это может привести к конфликтам имен):
testvar="$(grep -oP '^DIR\s*=\s*"\K[^"]+' /home/user/path/to/file.conf)"
Это доставит вам testvar=${HOME}/test/tmp
. Чтобы расширить $HOME
, теперь вам нужно оценить его:
testvar=$(eval echo "$testvar")
Однако использование eval
для произвольного кода очень опасно. Если файл, который вы читаете, содержит команду, эта команда будет выполнена. Таким образом, подходы, приведенные в ответе @ilkkachu , намного лучше и безопаснее.