You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决systemd服务ExecStart中$(uname -r)参数传递异常问题

问题原因

systemd的ExecStart指令默认不会启动shell环境执行命令,仅会按空格对输入内容做参数分割,shell特有的命令替换语法$()无法被识别解析,空格会被直接当作参数分隔符,因此$(uname -r)会被拆分为$(uname和-r)两个独立参数,不符合预期。

单行配置解决方案

要在不调整脚本逻辑的前提下直接在ExecStart行实现需求,只需显式调用shell执行目标命令,将完整的执行逻辑作为参数传入shell即可。修改后的配置如下:

[Unit]
Description=Check kernel version

[Service]
ExecStart=bash -c '/home/handle-kernel-version.sh "$EXPECTED_KERNEL" "$(uname -r)"'
StandardOutput=journal+console
EnvironmentFile=/home/input_kernel.txt
Type=oneshot

[Install]
WantedBy=multi-user.target
配置说明
  • 用bash -c包裹全部执行逻辑,由shell负责解析变量和命令替换语法,符合预期执行流程
  • 命令内部的变量、命令替换外层添加双引号,可避免返回结果带特殊字符、空格时出现参数拆分异常
  • 原有EnvironmentFile定义的环境变量可被shell正常读取,无需额外调整其他配置项

内容的提问来源于stack exchange,提问作者EagleOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:15:03