为何添加|| true后LightDM启动脚本仍执行失败?
问题原因及解决办法
核心原因
LightDM的命令解析逻辑限制
LightDM的display-setup-script配置项不会将整个字符串作为shell命令解析执行,它只会把脚本路径当作要运行的程序,后面的|| true会被当成脚本的命令行参数传递进去,而非shell的逻辑运算符。因此脚本执行出错时,整个命令的退出状态就是脚本本身的退出码1,|| true完全没起到“忽略错误”的作用。脚本语法不兼容
把脚本的shebang从#!/bin/bash改成#!/bin/sh后,脚本里可能使用了Bash特有的语法(比如[[ ]]条件判断、数组操作、部分扩展语法等),这些语法在POSIX标准的sh中不被支持,直接导致脚本执行失败,返回退出码1。
解决步骤
- 修复脚本兼容性:把脚本的shebang改回
#!/bin/bash,确保脚本里的Bash语法能正常运行,从根源避免执行错误。 - 让
|| true生效:如果需要保留“忽略脚本错误”的逻辑,需要将整个命令包裹在shell中执行,修改display-setup-script配置为:
这样shell会完整解析sh -c '/opt/labdoo/setup/startup_scripts/screen_scaling.sh || true'|| true的逻辑,即使脚本执行失败,整个命令的退出码会是0,LightDM就不会因为错误卡住登录界面。
内容的提问来源于stack exchange,提问作者Tomasz Garbus
相关产品推荐
相关产品推荐

