【问题标题】:"bash" not found when running xargs in kubernetes在 kubernetes 中运行 xargs 时找不到“bash”
【发布时间】:2022-01-26 12:37:38
【问题描述】:

我正在尝试使用/理解 xargs 来打印我在 kubernetes 中跨不同命名空间运行的一些 pod 的各种详细信息。例如。该命令给出:

$ kubectl get pods -A | grep Error | awk '{print $2 " -n=" $1}'
my-pod-kf8xch6y-qc6ms-k6ww2 -n=my-ns
my-pod-kf8xlg64-g0ss7-mdv1x -n=my-ns
my-pod-kldslg64-polf7-msdw3 -n=another-ns

这是正确/预期的。

当我将xargs 添加到上述命令时,我得到:

$ kubectl get pods -A | grep Error | awk '{print $2 " -n=" $1}' | xargs kubectl $1 get pod $0 -oyaml | grep phase
Error from server (NotFound): pods "bash" not found
phase: Failed
phase: Failed

这实际上是预期的输出,但我不明白

Error from server (NotFound): pods "bash" not found

为什么bash 被传递给xargs

【问题讨论】:

  • 我不确定,但我认为参数 $0 是从您正在使用的 shell 分配的完整命令的第一部分。如果您使用zsh,它会说,而不是bash。在控制台echo $0 上试试看我的意思。 Bash 将 bash 放入 $0
  • 你是对的,打印 $0 表明第一个值是bash。但是如何将 awk 的两个输出作为单独的参数传递给 xargs?
  • 你想运行什么命令?

标签: linux awk kubectl xargs


【解决方案1】:

我们建议避免xargs 复杂化,并将最大值合并到单个awk 脚本中。

kubectl get pods -A | awk '/Error/{system("kubectl get pod "$2" -n="$1" -oyaml")}'|grep phase

或者获得更详细的结果:

kubectl get pods -A | awk '/Error/{system("kubectl get pod "$2" -n="$1" -oyaml")}'|grep -E  "(^  name|^  phase)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2021-02-19
    • 2019-04-15
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多