我在一个 shell 脚本文件 foo.sh 中有这些行:
ps ax | grep -E "bar" | grep -v "grep" | awk '{print $1}' | xargs kill -9 $1
当我使用这样的参数执行 shell 脚本时:
sh foo.sh arg_one
xargs 现在不能工作了。它从 shell 脚本中获取 $1 而不是 awk 的输出。
我知道我可以将 awk 的输出存储到一个文件中,稍后在 xargs 中使用它。
但是,有没有更好的解决办法呢?
== 已编辑 ==
感谢@peterph 的回答。 但是,有什么办法可以在 xargs 中使用 $1 吗?
== 编辑 2 ==
谢谢@Brian Campbell
尽管示例中应该有一个无用的 $1,但如果给出了“shell 脚本文件”的参数,那么 xargs 中的 $1 将不会像我希望的那样在我的计算机中工作(在你的计算机中,我思考)。 为什么?以及如何避免它?
最佳答案
xargs
从 stdin
读取列表,所以如果您想要通过 PID 终止进程,只需丢弃行中的最后一个 $1
。
作为旁注,ps
还可以根据命令名称打印进程(Linux 上的 procps 请参阅 -C
选项)。
关于linux - xargs 的 $1 与 shell 脚本中的 $1 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569049/