【发布时间】:2012-11-14 04:15:58
【问题描述】:
我在一个 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 中的文件名占位符,请使用
-I选项——例如xargs -I X cp X X.bak-- 查看手册页 -
@glennjackman 是的,你说得对。我已经检查了手册然后给出了这个问题:shell(或unix)的机制是什么?
-
机制是shell expansions,发生在命令执行之前。
标签: linux shell arguments xargs