Греп для проверки монтирования файловой системы и проверки пути к файлу предоставляет некорректную информацию

Чтобы понять это ... зависит ли ExecStart от среды, установленной этой командой? Поскольку эти строки на самом деле не выполняются в одной оболочке, вы не можете ожидать, что они будут совместно использовать среду. Что вам нужно, так это использовать ключевое слово Environment в файле модуля. Таким образом, ExecStart получит среду, определенную вашим файлом.

https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html

1
23.05.2019, 09:07
1 ответ

Идея вполне верна, но оператор отрицания для использования вместе с &&вообще не в том месте, он должен быть рядом с оператором 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
2
27.01.2020, 23:30

Теги

Похожие вопросы