linux - xargs 的 $1 与 shell 脚本中的 $1 冲突

标签 linux shell arguments xargs

我在一个 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 将不会像我希望的那样在我的计算机中工作(在你的计算机中,我思考)。 为什么?以及如何避免它?

最佳答案

xargsstdin 读取列表,所以如果您想要通过 PID 终止进程,只需丢弃行中的最后一个 $1

作为旁注,ps 还可以根据命令名称打印进程(Linux 上的 procps 请参阅 -C 选项)。

关于linux - xargs 的 $1 与 shell 脚本中的 $1 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569049/

相关文章:

linux - Bash,执行命令但继续交互式 session

c++ - 类构造函数参数 C++

linux - 如何从使用 `grep -P` 转换为 `grep -E` ?

javascript - Node exec 没有执行脚本的权限

linux - 如何在新行上获取 diff 命令的输出

ios - 预期方法调用的参数太多 1 有 3

c# - 在覆盖基本方法时,为什么默认参数不能正常工作?

linux - bash 函数与别名冲突

ruby - 每次在 linux 目录中创建新文件时运行一个进程

linux - 如何从目录中查找最近的文件