【问题标题】:init.d script stop echo pipe to grep outputting to terminalinit.d 脚本停止回显管道到 grep 输出到终端
【发布时间】:2015-11-12 13:44:02
【问题描述】:

Amazon Linux 上的init.d 脚本中是否有以下命令静音

response=`curl 'http://localhost:9200'`
if (echo "$response" | grep -e "\"status\" : 200"); then
... some logic

此命令和条件按预期工作,但是当脚本运行 service scriptname start 时,控制台会打印以下内容

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   333  100   333    0     0  54278      0 --:--:-- --:--:-- --:--:-- 55500
  "status" : 200,
Starting scriptname                                            [  OK  ]

如果可能的话,我希望只显示:

Starting scriptname                                            [  OK  ]

【问题讨论】:

  • man curl | grep -i -C 2 quietman grep | grep -i -C 2 quiet

标签: linux bash init.d


【解决方案1】:

Curl 有一个静默标志来阻止它向 stdout 和 stderr 写入输出。您可以使用以下任何一种:

curl -s
curl --silent

如果您使用静默标志,则脚本将停止工作,因为 grep 在 if 语句中找不到任何内容。使用以下命令将查看 curl 的返回值,而不是解析其响应:

if response=`curl -sS 'http://localhost:9200'`; then
... some logic

这将在成功时不打印任何内容或在失败时显示错误消息。响应变量将包含从请求中读取的所有数据。

您可以在其manpage 上了解有关 curl 可以做什么的更多信息

【讨论】:

  • 您可以忽略文本响应,只需检查来自curl 的退出代码。这通常更简单、更健壮。
  • 完全同意,我有一个草稿作为答案,我会复活它
猜你喜欢
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 2018-11-18
  • 1970-01-01
相关资源
最近更新 更多