Чтобы понять это ... зависит ли ExecStart
от среды, установленной этой командой? Поскольку эти строки на самом деле не выполняются в одной оболочке, вы не можете ожидать, что они будут совместно использовать среду. Что вам нужно, так это использовать ключевое слово Environment
в файле модуля. Таким образом, ExecStart
получит среду, определенную вашим файлом.
https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html
Идея вполне верна, но оператор отрицания для использования вместе с &&
вообще не в том месте, он должен быть рядом с оператором test
.
С рассматриваемой вами командой первая часть условия if
оценивается следующим образом:
grep -qs "$mount" /proc/mount !
, в котором оператор отрицания рассматривается как другой файл для поиска с помощью grep
, что привело бы к grep: !: No such file or directory
, но из-за флагов подавления ошибок в файле, -не существующем (-s
), ошибки не отображаются в терминале.
Кроме того, составной оператор {..}
не нужен, если у вас есть одна команда. Вам просто нужно сделать ниже:
if grep -qs "$mount" /proc/mount && test -d "/fileserver/subdirectory"; then
echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount && ! test -d "/fileserver/subdirectory"; then
echo "mount exists, but path does not."
fi
Тем не менее, вам не нужно отключать вывод grep
сразу, пока вы не подтвердите, что сценарий работает. Попробуйте запустить его без флагов -qs
для добавления шага отладки.
Вы также можете использовать инструмент mountpoint (1)из пакета util -linux , с помощью которого можно напрямую проверить, смонтирован ли путь
if mountpath -q "/fileserver/subdirectory"; then