Я пытался выполнить эту команду , чтобы исправить еще одну ошибку (Невозможно использовать 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.
-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
опция, этот подход гарантирует, что команда, которая выполняется, имеет доступ к терминалу.