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

sysvinit进程未运行时状态无法存入Bash变量的问题

为什么sysvinit状态脚本的dead输出无法存入Bash变量?

问题原因

sysvinit的服务状态脚本普遍遵循这样的设计:当进程运行时,状态信息输出到标准输出(stdout);当进程停止时,状态信息输出到标准错误(stderr)。

你使用的命令status=$(/etc/init.d/process status | cut -d ' ' -f 5)中,管道|仅会捕获标准输出的内容,标准错误的输出会直接绕过管道,打印到终端,因此进程停止时的dead字符串无法被存入变量。

解决办法

方法1:将stderr重定向到stdout,统一捕获输出

把标准错误的内容重定向到标准输出,让管道能获取所有状态信息:

status=$(/etc/init.d/process status 2>&1 | cut -d ' ' -f 5)

这里的2>&1表示将文件描述符2(对应stderr)的输出重定向到文件描述符1(对应stdout),确保所有输出都能被管道处理。

方法2:先捕获全量输出再提取状态

如果需要保留完整输出做后续处理,可以先把所有输出(包括stdout和stderr)存入变量,再提取目标字段:

full_status_output=$(/etc/init.d/process status 2>&1)
status=$(echo "$full_status_output" | cut -d ' ' -f 5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:17:36