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:

- open-tty

-o

Повторно откройте stdin как / dev / tty в дочернем процессе перед выполнением команды, что позволит этой команде быть связанной с терминалом, пока xargs читает из другого потока, например из трубы. Это полезно, если вы хотите, чтобы xargs запускал интерактивное приложение.

grep -lz PATTERN * | xargs -0o vi

Но man xargs не показывали эту опцию.

В журнале изменений не упоминалось никаких изменений флага.

Моя версия xargs в Ubuntu 16.04 LTS:

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.
2
задан 15 July 2019 в 08:52

1 ответ

-o опция, которую Вы хотите, была добавлена в 2017. Ваша версия с 2016. Необходимо обновить.

Подробнее

Отметьте год в своем сообщении версии:

Copyright (C) 2016 Free Software Foundation, Inc.

Теперь, посмотрите на этот раздел от findutils ChangeLog:

2017-06-08  Bernhard Voelker  <mail@bernhard-voelker.de>

        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 xargs от версии 2016 года показывает этот пример для обходного решения:

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

Этот пример для emacs но та же идея относится к любой другой команде, которую можно хотеть выполнить. Как -o опция, этот подход гарантирует, что команда, которая выполняется, имеет доступ к терминалу.

5
ответ дан 2 December 2019 в 01:52

Другие вопросы по тегам:

Похожие вопросы: