当我在iterm2 (macOS)中尝试时,它工作了。
kubectl get nodes node1 node2 --show-labels
当我尝试这个,它工作。
echo "node1" | xargs -I{} kubectl get nodes {} --show-labels
但是当我尝试这个时,它不工作。
echo "node1 node2" | xargs -I{} kubectl get nodes {} --show-labels
我认为空格有问题,但我不能解决它。你能帮我吗?
默认情况下,xargs
将尽可能多地将提供的参数塞进单个命令中。(我在你原来的xargs
调用中添加了echo
,所以我们看到发生了什么。)
$ echo "node1 node2 node3 node4" | xargs -I{} echo kubectl get nodes {} --show-labels
kubectl get nodes node1 node2 node3 node4 --show-labels
如果您希望每个选择器都是自己的命令,则需要添加-n1
:
$ echo "node1 node2 node3 node4" | xargs -n1 -I{} echo kubectl get nodes {} --show-labels
kubectl get nodes node1 --show-labels
kubectl get nodes node2 --show-labels
kubectl get nodes node3 --show-labels
kubectl get nodes node4 --show-labels
老实说,这个解决方案还不够清楚你想要实现什么——你可以很容易地使用基于kubectl
的解决方案,而不需要触摸xargs
。然而,如果你能说明你真正的问题——也许帮助你解决问题会更容易。
你可以在这里使用两个选项:
与xargs
echo node1,node2,node3,...nodeN | tr -d 'n' | xargs -I{} -d "," kubectl get nodes {} --show-labels
没有xargsfor node in $(kubectl get nodes -o name| cut -d "/" -f2); do kubectl get nodes $node --show-labels; done