Executa um script de shell em uma sessão de terminal existente

0

Estou escrevendo um script para implantar um projeto em vários servidores (9 e contando). Com compressão, cópia e conexões remotas, o script está rapidamente se tornando bastante lento. Então, agora estou investigando que o script acione uma execução auxiliar por meio da tela. O fluxo de trabalho ideal no pseudocódigo é o seguinte:

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

Tudo é simples o suficiente, exceto pelo comando marcado com um *. Eu posso canalizar uma mensagem estática para write $TTY , mas para receber a entrada do usuário eu precisaria executar um script de shell de fora do terminal no qual ele deve ser exibido. Existe alguma maneira de fazer isso?

(Eu estou rodando o CentOS no servidor de desenvolvimento, a propósito.)

    
por Mikkel 20.06.2012 / 20:40

1 resposta

1

Você pode iniciar o auxiliar 2 conectado ao TTY com um comando como:

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

para redirecionar entrada padrão, saída padrão e erro padrão para TTY.

Infelizmente, existem problemas com essa abordagem:

  1. Uma vez que "script de implantação" sai, o shell estará lendo a entrada do TTY para obter o próximo comando do usuário. Quando o shell e o helper2.sh estão tentando ler a partir do TTY, a entrada dos usuários não é previsível.

  2. Se o usuário iniciar e editar ou algum outro comando após o lançamento do 'script de implantação', a saída do ajudante 2 irá poluir o que está na tela.

Algumas abordagens alternativas:

  • Conclua o script de implantação wait para que os scripts auxiliares evitem que o shell concorra com o auxiliar 2 para a entrada de usuários
  • O ajudante 2 apenas envia por e-mail ao desenvolvedor o registro sem perguntar se deseja vê-lo
por 22.06.2012 / 00:45