Из справочного руководства Bash:
Если первый символ параметра - восклицательный знак (!), Уровень переменной вводится косвенное обращение. Bash использует значение переменной, образованной из оставшейся части параметра, в качестве имени переменной ; затем эта переменная расширяется, и это значение используется в остальной части замены, а не в значении самого параметра. Это называется косвенным раскрытием.
Итак, вы можете это сделать:
DB_NAME=$(${!ENV_VARIABLE} python -c "from core import config; print config.DATABASE['db_name']")
Ubuntu 18.04.1 LTS достаточно нов, чтобы использовать systemd
, а systemd
не монтирует файловые системы, перечисленные в /etc/fstab
, только с помощью традиционного mount -a
.
Вместо этого он автоматически -генерирует.mount
-тип файл системного модуля для каждой /etc/fstab
строки,добавляет к этим модулям некоторые зависимости по умолчанию, а затем запускает эти модули параллельно во время загрузки, по сути, как можно скорее.
Хитрость в том, что если systemd
явно не сказано, что одно монтирование зависит от того, что другое уже сделано, нет гарантии какого-либо конкретного порядка. Порядок строк /etc/fstab
не имеет значения, как когда-то это могло быть с mount -a
.
Ваше второе привязное средство передвижения может быть успешным только в том случае, если /mnt/usb2T
уже установлено. Чтобы передать это требование systemd
, вам нужно изменить его строку fstab
на эту:
/mnt/usb2T/inbox /export/inbox nfs bind,x-systemd.requires=/mnt/usb2T 0 0
Или, в зависимости от используемой версии systemd
, к этому:
/mnt/usb2T/inbox /export/inbox nfs bind,x-systemd.requires-mounts-for=/mnt/usb2T 0 0
(Технически, при монтировании с привязкой тип файловой системы в строке fstab
, вероятно, должен быть none
вместо nfs
, но я думаю, что это в любом случае игнорируется при монтировании с привязкой.)