【问题标题】:Return Non-empty Output: grep httpd | head -1 | tail -c 9返回非空输出:grep httpd |头-1 |尾巴-c 9
【发布时间】:2017-05-30 22:20:31
【问题描述】:

我需要返回一些值。 它可以是任何东西。

如果服务正在运行,此代码将返回“08:10”。

ps -eo comm,etime | grep httpd | head -1 | tail -c 9

但是如果服务没有运行呢?

service httpd stop

让我们再试一次:

ps -eo comm,etime | grep httpd | head -1 | tail -c 9

绝对没有。

这对我来说是个问题。我的 php 数组希望可以使用。

我怎么能......返回某种东西而不是什么?

无需诉诸巨大的复杂性。

即使是以下情况我也可以。

无论输出是什么,只需在输出中附加或预先准备一个字符。

也许这对计算机的压力会更小?

只需将“0”附加到任何输出。就算什么都没有(空)

【问题讨论】:

  • 尝试追加| grep . || echo "no match"
  • 你只想要etime,为什么还要输出comm
  • 好吧,您要做的是编写一个 shell 脚本,它 (1) 获取 http 的 pidfile 并从中获取 pid,(2) 检查 PID 是否仍在运行,如果是, (3) 运行ps -o etime= -p PID || echo '00:00'
  • @Suspended 如果您出于某种原因想删除您的问题,请投票删除它或标记它以引起版主注意,而不是在帖子中填写“已删除”。
  • 请不要破坏您的帖子。

标签: bash awk sed grep tr


【解决方案1】:

这是pgrep的工作:

pgrep httpd

如果进程正在运行,退出状态 ($?) 将是 0,以及 STDOUT 上的统计信息。如果进程没有运行,退出状态将为1

如果需要,匹配整个命令行:

pgrep -f httpd

如果您不需要 STDOUT:

pgrep -f httpd >/dev/null

如果您想在进程未运行时在 STDOUT 上显示某些内容,请对失败的情况进行短路评估:

pgrep httpd || echo NO

当进程未运行时,这将在 STDOUT 上输出NO

【讨论】:

    【解决方案2】:

    这可能没那么复杂:

    ret=$(ps -eo comm,etime | grep httpd | head -1 | tail -c 9)
    if [ -z "$ret" ];then
     echo "What you want"
    else
     echo "${ret}"
    fi
    

    【讨论】:

    • @Suspended。我之前的回答是错误的。并不真地。使用管道的 if 非常困难(即使使用树)。
    【解决方案3】:

    我同意@heemayl 的观点,即 pgrep 将是一个更好的选择。但是,这可能会有所帮助:

    { ps -eo comm,etime; echo "httpd not running"; } | grep -m 1 httpd | cut -d- -f2
    

    【讨论】:

    • 恐怕我不明白你对printf的评论。
    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多