【问题标题】:Response from a Bash Command using loop使用循环的 Bash 命令响应
【发布时间】:2020-03-19 03:01:41
【问题描述】:

我想获取 bash 命令的响应并将其保存在文件中。还想继续循环运行这个cmd。例如:

ps aux |grep 'server.js' <-- cmd
ubuntu   15681  0.0  0.0  14856  1028 pts/8    S+   02:13   0:00 grep --color=auto server.js <--save this response

【问题讨论】:

  • (1) 您可能应该使用grep '[s]erver.js',因为这会阻止grep 行出现在输出中。 (2) 将while true; do …; done &gt; a.file中的代码包裹起来,写入a.file。如果你也想在终端上看到输出,那么while true; do …; done | tee a.file
  • 我不关注“循环运行此命令”
  • 我的意思是“在循环中运行这个命令”例如:我正在检查 service.js 的内存使用情况。所以就像在我停止 cmd 之前,它会继续运行,并继续从那里获取响应并将其保存在文件中。然后我可以比较响应并通过'service.js'获取内存使用的句柄
  • 您是否阅读了您应用于问题的cmd 标签的描述?
  • 是的。响应是 server.js: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ubuntu 15681 0.0 0.0 14856 1028 pts/8 S+ 02:13 0:00 grep --color=auto server.js 所以,在这里我可以看到 server.js 正在分配什么。

标签: bash file cmd


【解决方案1】:

这个对我有用。

while var=$(ps aux|grep 24725) || break; do sleep 1s && echo "$var" >> file.txt; done

【讨论】:

  • 是的。我在添加简单的 sleep cmd 时遇到了麻烦,因为我对 bash 命令没有任何先验知识。但无论如何,非常感谢。
【解决方案2】:

您可以使用Command Substitution. 将命令的输出捕获/保存在变量中。

variable=$(ps aux |grep 'server.js')

但我建议使用pgrep

variable=$(pgrep -x server.js)

使用循环将该输出保存在文件中。

while var=$(pgrep -x server.js) || break; do echo "$var" > file.txt; done

如果你想要的话,或者使用你的 ps 而不是 pgrep

  • &gt; 截断file.txt 如果你想追加使用&gt;&gt;

【讨论】:

  • OP 说 保存在文件中,而不是变量
  • Rigth,我正在等待 OP 清除 I want it in a loop.
  • 不知道是不是我说的不够清楚。我想以 1s 的间隔将 cmd 的输出保存在一个文件中。所以我想我需要一个带有 sleep 1s 的循环来执行操作 ps aux |grep 24725
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2019-09-29
相关资源
最近更新 更多