xargs:无效选项——‘o’

xargs:无效选项——‘o’

我试图执行此命令修复另一个错误(无法使用 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 选项:

--打开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.

答案1

您想要的选项-o是在 2017 年添加的。您的版本是 2016 年的。您需要升级。

细节

请注意版本消息中的年份:

Copyright (C) 2016 Free Software Foundation, Inc.

现在,看一下findutilsChangeLog 中的这一部分:

2017-06-08  Bernhard Voelker  <[email protected]>

        xargs: add -o, --open-tty option
        This option is available in the xargs implementation of FreeBSD, NetBSD,
        OpenBSD and in the Apple variant.  Add it for compatibility.

解决方法

man xargs2016 年版本中显示了此解决方法的示例:

xargs sh -c 'emacs "$@" < /dev/tty' emacs

此示例适用于emacs您可能希望运行的任何其他命令,但同样的想法也适用于您可能希望运行的任何其他命令。与选项一样-o,此方法可确保正在运行的命令可以访问终端。

相关内容