【问题标题】:shell script gives output in 2 lines I need only 1shell 脚本在 2 行中给出输出我只需要 1
【发布时间】:2016-11-21 06:58:00
【问题描述】:

我将以下命令保存在 .sh 文件中

prog=$1
ps axf | grep $prog | grep -v grep | awk '{print "kill -9 " $1}'

当我执行它时得到以下输出

kill -9 3184
kill -9 20359

但我只需要它的第一行,因为那是唯一有效的 pid。如何从输出中删除第二行。

【问题讨论】:

  • 最好使用pkill。不要重新发明轮子!
  • ps axf | grep $prog | grep -v grep的o/p是什么?
  • grep 后跟 awk 是一种反模式。您应该使用awk '!/grep/ { ... } 来处理所有没有字符串“grep”的行。管道和叉子是昂贵的操作。
  • 另一种反模式:kill -9。任何未被-INT-HUP-QUIT 之一杀死的程序都有错误。您应该使用这三个之一来允许被杀死的程序清理它使用的一些资源(例如删除临时文件)。
  • @IporSircer pkill 有效。谢谢。

标签: linux shell awk pipe


【解决方案1】:

你想做的事情有几个问题:

  • 您正在为相对简单的事情构建一个由 4 个命令组成的链
  • 因此,您将只获得包含$prog 的进程列表的第一行(不包括您过滤掉的grep $prog);你怎么能确定这是你想要的过程?

正确使用的命令是

pkill $prog`

按照 cmets 中的建议,这可能会满足您的需求。

仅供参考并回答您的问题,您可以通过管道将输出发送到head -n 1 以仅返回第一行:

<list of commands> | head -n 1

但是,在您的情况下,这会将第五个命令添加到链中,因此我建议您不要这样做。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多