Обработайте «Отказано в доступе» внутри скрипта

Если вас беспокоит, что ваша машина не всегда подключена к сети, вы можете просто использовать noauto в записи fstab.

<URL> <mountpoint> davfs2 credentials=<full path to your cred file>,uid=<your user's UID>,gid=<your group's GID>,noauto  0       0

Это позволит вам смонтировать его с помощью простой команды.

sudo mount <mountpoint>

Таким же образом можно размонтировать.

sudo umount <mountpoint>

Он будет монтироваться только тогда, когда вы этого хотите, и никогда автоматически при загрузке.

0
31.03.2021, 17:07
1 ответ

В вашем скрипте, поскольку вы используете канал, вы уже игнорируете статус выхода my_command;статус выхода конвейера будет статусом выхода последней команды в конвейере.

Тем не менее, Bash позволяет вам проверять код выхода из любой команды в конвейере; теперь вам просто нужно убедиться, что ваша удаленная команда всегда выполняется успешно. Поскольку вы уже игнорировали его статус выхода, мы не добавляем никаких новых ошибок.

session_check() {
    ssh -o BatchMode=yes $USER@$SERVER 'my_command; exit 0' | grep -q "value"
    local rc=$?
    if [[ ${PIPESTATUS[0]} != 0 ]]; then
        return 127
    fi
    return $rc
}

Если вы хотите также получить статус выхода my_command, это будет значительно сложнее; возможно, затем разделите это на две отдельные команды.

session_check() {
    status=$(ssh -o BatchMode=yes $USER@$SERVER 'my_command; echo $?') &&
    sed '$d' <<<"$status" | grep -q "value"
    return $(sed -n '$p' <<<"$status")
}

Обратите внимание, как мы выводим код выхода в качестве последней строки текстового вывода команды ssh, а затем повторно обходим его. Это, вероятно, следует реорганизовать для повышения эффективности, но, по крайней мере, показывает способ реализовать это, если вам это нужно.

Обратите внимание, что мы используем здесь несколько возможностей -только Bash; сценарий должен иметь #!/bin/bash, а не #!/bin/shв шебанге.

Необходимость в подобного рода махинациях указывает на то, что вы близки к границам того, что можно сделать с точки зрения управляемой обработки ошибок в модели обработки оболочки. Возможно, вы захотите попробовать переписать часть или все это на современном языке сценариев, таком как Python.

1
28.04.2021, 22:54

Теги

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