Выполнение команды через xargs не выполняется, но выполняется вручную - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать команду, которая будет автоматически присоединяться к моему существующему контейнеру докера Python, и пытаюсь связать кучу команд вместе.

docker ps | grep "mypythoncontainer" | awk '{print $1}' | xargs docker attach

Если я запускаю

docker ps | grep "mypythoncontainer" | awk '{print $1}' | xargs echo

Я получаю строку идентификатора докера, как и ожидалось.И если я сделаю docker attach {id string} (скопировано с возврата утверждения прямо над этим), это работает.Но когда я запускаю полную команду сверху, я получаю сообщение об ошибке (the input device is not a TTY).

Так что docker ps | grep "mypythoncontainer" | awk '{print $1}' | xargs echo будет выводить abc, но docker ps | grep "mypythoncontainer" | awk '{print $1}' | xargs docker attach не будет работать, в то время как docker attach abc работает.Не уверен, что насчет xargs, я не понимаю.

1 Ответ

0 голосов
/ 25 сентября 2019

Попробуйте:

docker attach $(docker ps | grep "mypythoncontainer" | awk '{print $1}')

или проще:

docker attach $(docker ps | awk '/mypythoncontainer/{print $1}')

Не уверен, что насчет xargs, я не понимаю.

Запуск: ...| ... docker ... перенаправит docker стандартный ввод на ... выход awk, который уже был прочитан xargs.Таким образом, docker abc будет работать со сломанным (уже закрытым) STDIN, а затем завершится неудачей.

...