Использование yes с интерактивным скриптом приводит к коду выхода 141 - PullRequest
0 голосов
/ 03 ноября 2018

Мне нужно запустить команду в CircleCI, которая передаст заранее заданные аргументы следующей команде. Когда команда ожидает только строки или целые числа, она прекрасно работает:

printf "arg1\narg2\n" | my_command

Но если «моя команда» ожидает, что пользователь будет использовать клавиши со стрелками для выбора опции, а затем клавишу возврата, этот метод завершится неудачно.

Вот пример того, что я описываю:

? Which variation would you like to apply? (Use arrow keys)
❯ A
  B
  C

Итак, я попробовал другой вариант, найдя изящный инструмент с именем yes:

yes | my_command

Это на самом деле будет работать (и выберет опцию A), но это приведет к неудачной сборке в CircleCI из-за кода выхода 141. Насколько я понимаю, этот код выхода происходит, потому что yes все еще отправляет входные данные процессу, который имеет вышел.

Есть ли другой способ, которым я могу достичь?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Мне удалось переопределить ошибку, используя двойные каналы для true.

yes | my_command || true

Это работает, но игнорирует любые ошибки, которые может выдать последовательность, делая мои тесты CI вечнозелеными. Что не идеально, но работает.

0 голосов
/ 03 ноября 2018

Можно попробовать Ожидайте - запрограммированный диалог с интерактивными программами

...