Linux - 一个命令即可获得多种服务状态

Jam*_*mes 2 linux grep

我正在尝试在 Unix 中检索多个服务状态的列表。我正在使用service命令:man page

例如,状态都以transmission-daemon字符串开头。

我需要能够使用单个命令列出多个服务的状态。这是我目前正在尝试(并失败)的内容:

在这里,我尝试使用grep.

service $(ls /etc/init.d | grep "transmission-daemon") status
Run Code Online (Sandbox Code Playgroud)

在这里,我试图列出所有状态,然后列出grep它们。

service --status-all | grep "transmission-daemon"
Run Code Online (Sandbox Code Playgroud)

这会产生以下内容,但没有多大帮助:

通过 grep 和 service --status-all 的多个传输守护进程

如何使用单个命令有效地实现我的要求,以便我可以继续管道以awk进行进一步的定制?

所需的示例输出:

transmission-daemon started
transmission-daemon2 stopped
transmission-daemon3 started
Run Code Online (Sandbox Code Playgroud)

gni*_*urf 6

我没什么好说的,除了:

  • 你的ls | grep事情在我看来真的很尴尬和错误
  • 为了解决您的grep问题,是service输出到stderr吗?将stderr重定向到stdout怎么样?

    service --status-all 2>&1 | grep "transmission-daemon"
    
    Run Code Online (Sandbox Code Playgroud)

(但这样做对我来说似乎也很尴尬和错误)。


显然您想使用status命令运行您的服务,对吗?像这样使用怎么样:

#!/bin/bash

shopt -s nullglob

for s in /etc/init.d/transmission-daemon* ; do
    service "$(basename "$s")" status
done
Run Code Online (Sandbox Code Playgroud)

在一行中:

bash -c 'shopt -s nullglob; for s in /etc/init.d/transmission-daemon* ; do service "$(basename "$s")" status; done'
Run Code Online (Sandbox Code Playgroud)

这给出:

在此处输入图片说明

希望这会让您走上正确的轨道(或至少走上更好的轨道)!