Я пишу сценарий для развертывания проекта на нескольких серверах (9 и считая). Благодаря сжатию, копированию и удаленным подключениям сценарий быстро становится довольно медленным. Итак, сейчас я изучаю, как скрипт запускает помощник через экран. Идеальный рабочий процесс в псевдокоде выглядит следующим образом:

deployment script
    accept user input for deployment parameters
    echo "deployment initiated"
    TTY=`tty`
    start helper 1 in detached screen, dumped to a temp file
    exit

helper 1
    export from SVN
    compress files
    upload to temporary directory on live servers
    swap old and new web directories on live servers
  * start helper 2 in $TTY
    exit

helper 2
    echo "deployment done"
    echo "do you want to view deployment log? [y/N]"
    take user input
    if yes
        output temp file
    delete temp file
    exit

Все достаточно просто, за исключением команды, отмеченной *. Я могу передать статическое сообщение для write $TTY , но для ввода данных от пользователя мне потребуется выполнить сценарий оболочки снаружи терминала, в котором он должен отображаться. Есть какой-либо способ сделать это?

(Между прочим, я использую CentOS на сервере разработчиков.)

1 ответ1

1

Вы можете запустить помощник 2, подключенный к TTY, командой:

helper2.sh >$TTY 2>&1 <$TTY

перенаправить стандартный ввод, стандартный вывод и стандартную ошибку в TTY.

К сожалению, есть проблемы с этим подходом:

  1. После выхода из сценария развертывания оболочка будет читать вводные данные из TTY, чтобы получить следующую команду пользователя. Когда и shell, и helper2.sh пытаются читать из TTY, куда вводит пользовательский ввод, не предсказуемо.

  2. Если пользователь запускает редактор и какую-либо другую команду после запуска "сценария развертывания", выходные данные помощника 2 будут загрязнять то, что находится на их экране.

Некоторые альтернативные подходы:

  • Пусть сценарий развертывания wait завершения вспомогательных сценариев, чтобы не допустить конкуренции оболочки с помощником 2 для ввода данных пользователем
  • Попросите помощника 2 просто написать разработчику журнал, не спрашивая его, хотите ли вы его увидеть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .