在提到this question时,我仍然挣扎于下面的单线行来工作。
kubectl get ns | while read -r line; do echo `$line | grep Term | cut -d' ' -f1`; done我希望打印出$line | grep Term | cut -d' ' -f1的结果,但是它打印出一个空行(echo),然后执行$line | grep Term | cut -d' ' -f1的结果
bash: NAME: command not found
bash: cert-manager: command not found
bash: configmap-4262: command not found
bash: configmap-4430: command not found同样的结果与略有不同的方法相同:
kubectl get ns | while read -r line; do ns=`$line | grep Term | cut -d' ' -f1`; echo $ns; done我真正想要实现的是使用$line | grep Term | cut -d'的结果作为shell脚本的输入。
do ns=`$line | grep Term | cut -d' ' -f1`; ./delete-kube-ns.sh $ns;或
$line | grep Term | cut -d' ' -f1` | xargs ./delete-kube-ns.sh发布于 2020-02-15 18:34:24
grep和cut的任何组合(以及head、tall等以及sed)都建议在Awk中重新实现。保存一个外部流程是一个小的优化,但这通常会带来更多的简单改进。例如,regex应该覆盖整个行,还是应该只在第一个字段中查找匹配项?当然,用grep也不是不可能的,但是在Awk中非常容易。
kubectl get ns |
awk '/Term/ { print $1 }'如果您只想在第一个字段中查找Term,那就是'$1 ~ /Term/ { ...
您可以使用管道将其扩展到
... | xargs ./delete-kube-ns.sh如果这是你的最终目标。
https://stackoverflow.com/questions/60230242
复制相似问题