我试图执行此命令来修复另一个错误(无法使用 TTY - 输入不是终端或正确的文件类型):
kubectl get pods -n foobar | grep baz | awk '{print $1}' | xargs -J % kubectl exec -it -n foobar % /bin/bash
这导致了以下错误:
xargs: invalid option -- 'o'
我能够在我的 Mac Mojave 上正确执行该命令,但在 Ubuntu 16.04 上却不行。
根据xargs 网站,应该有一个 -o 选项:
--open-tty
-o
在执行命令之前,在子进程中将 stdin 作为 /dev/tty 重新打开,从而允许该命令与终端相关联,而 xargs 从不同的流(例如管道)读取。如果您希望 xargs 运行交互式应用程序,这将很有用。
grep -lz 模式 * | xargs -0o vi
但是man xargs
没有显示这个选项。
更改日志没有提到对标志的任何更改。
我在 Ubuntu 16.04 LTS 上的 xargs 版本:
xargs (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
您想要的
-o
选项是在 2017 年添加的。您的版本是 2016 年的。您需要升级。细节
请注意版本消息中的年份:
findutils
现在,查看ChangeLog中的这一部分:解决方法
man xargs
从 2016 版开始,此示例显示了解决方法:此示例适用于
emacs
但相同的想法适用于您可能希望运行的任何其他命令。与该-o
选项一样,此方法可确保正在运行的命令可以访问终端。