Вы, вероятно, вводят в заблуждение о подлинном значении set -e
. Тщательное чтение вывода help set
шоу:
-e Exit immediately if a command exits with a non-zero status.
Так -e
о статусе выхода команд, являющихся ненулевым, не о синтаксических ошибках в Вашем сценарии.
В целом это считают плохой практикой для использования set -e
, потому что все ошибки (т.е. все ненулевые возвраты из команд) должны быть энергично обработаны сценарием (думайте устойчивый сценарий, не те, которые взбесились после ввода имени файла с пространством, или это запускается с дефиса).
В зависимости от типа синтаксической ошибки сценарий даже не мог бы быть выполнен вообще. Я не достаточно хорошо осведомлен в ударе для сообщения точно, что класс синтаксических ошибок (если только они могут быть классифицированы) мог бы привести к непосредственному прерыванию сценария или нет. Возможно, некоторые гуру Bash присоединятся и разъяснят все.
Я только надеюсь, что разъяснился set -e
оператор!
О Вашем желании:
Я ожидал такое безопасное поведение от разумного языка программирования..., возможно, это, как должны сообщать, как ошибка/желание колотит разработчиков
Ответ определенно нет! как, что Вы наблюдали (set -e
никакой ответ, как Вы ожидаете) на самом деле очень хорошо документируется.
Дольше не рекомендуется не подвешивать / резюме. Это сделано в Logind.
Конечно, у меня есть то, что я считаю правильной версией Systemd (которая предоставляет вход в систему) и правильную версию нагрудной версии, и у меня все еще есть проблемы (хотя и не с хрустящим).
В любом случае убедитесь, что у вас есть как минимум Systemd = 215-5 + B1
, Libpam-Systemd = 215-5 + B1
и
PolicyKit-1 = 0.105-7
$ qdbus --system org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.CanSuspend
yes
$ qdbus --system org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Suspend true
ETA:, по-видимому, вам также нужен SystemD-Sysv, который собирается разбить вверхству, если у вас есть (это может быть достаточно хорошей заменой, но есть некоторые вещи, которые все еще требуют upstart)
Лучше и точный (& Конечно, работа) Попробуйте:
dbus-send --print-reply --system --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Suspend boolean:true