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

将systemctl命令赋值给bash变量时报systemd-escape错误如何解决

问题原因

你当前的写法只是将命令字符串赋值给了变量,并没有实际执行命令。当你后续直接调用$status运行时,systemctl会把管道符、grep、sed等后续所有参数都当作systemd单元名称解析,因此会抛出找不到对应服务/挂载单元的错误。

解决方案

要将命令执行结果存入bash变量,需要使用命令替换语法,用$()包裹需要执行的命令即可。

方法1:直接修正原写法

status=$(systemctl status syslog-ng | grep 'Active:' | sed 's/.*: //' | sed 's/since.*//g')

执行后$status的值就是你要提取的active (running)这类状态内容。

方法2:简化写法(减少管道开销)

可以直接用sed单次处理完成匹配和提取,不需要额外调用grep:

status=$(systemctl status syslog-ng | sed -n '/Active:/ s/.*: \(.*\) since.*/\1/p')

方法3:更稳定的原生方案(推荐用于脚本)

systemd自带了查询服务运行状态的专用子命令is-active,不需要解析格式化输出,结果更稳定可靠:

status=$(systemctl is-active syslog-ng)

该命令会直接返回active/inactive/failed等标准状态值,适配所有systemd发行版,不会因为systemctl status的输出格式更新而失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:03