Automatizando o aplicativo de linha de comando do Unix que solicita entrada

3

Estou tentando automatizar um script de comando do Unix e canalizar a saída para o mailx para que eu possa saber se preciso editar manualmente os arquivos antes de enviá-los por FTP. Muito disso é automatizado, mas devido a um bug, eu preciso pausar manualmente o processo de automação se um script detectar determinados dados.

Estou tentando executar o script display_orders. Depois de iniciar o script, ele solicita a entrada e, em seguida, retorna a saída. Eu preciso dar ao script um valor TargetSubID e, em seguida, redirecionar a saída para mailx.

username@unix$ display_orders
TargetSubID: BROKERA
Size:
Side:
Symbol:

There were 3 trades found!

O TargetSubID, Tamanho, Lado e Símbolo são pedidos de entrada. Você pode digitar um valor que gostaria de pesquisar ou pressionar Enter para continuar até o próximo prompt. No último prompt, o script pega todas as entradas e faz a mágica e retorna os valores com base na entrada.

Eu tentei fazer coisas como:

display_orders << EOD
? BROKERA
?
?
?
?EOD

Mas o script é executado e parece que há um problema de análise de entrada (que não espero que você solucione problemas). Olhando para o código de display_orders, ele parece um padrão Perl normal, mastigando a entrada e analisando-a.

Gostaria de obter uma solução de linha de comando para isso, para que eu possa adicioná-la aos meus trabalhos do cron (além disso, sempre estive curioso sobre como automatizar os aplicativos de console baseados em entrada).

Eu tentei googling, mas o meu google fu é fraco sobre este assunto, aparentemente. Eu acho que só quero redirecionar a entrada para o aplicativo de console, mas acho que não estou entendendo como o < < operador trabalha.

No final, gostaria de uma solução que possa ser semelhante a essa (percebo que isso não funciona, mas isso pode ajudar alguém a entender o que estou tentando fazer):

display_orders << BROKERA | mailx -s 'Daily OATS Check' [email protected]
    
por ramonecung 08.02.2013 / 19:43

1 resposta

3

Acho que o ingrediente que falta é o funcionamento do script display_orders (ou seja, sem detalhes, o problema não pode ser resolvido adequadamente).

"esperar" é definitivamente a "melhor" solução.

No entanto, eu criei um hack rápido e desagradável que pode (mas provavelmente não funcionará) para você. Se o problema for um pequeno atraso nas entradas confundindo o script display_orders e não for sensível ao tempo, você pode esperar cegamente um curto período entre as respostas -

(
echo $BROKERA
sleep 1
echo $Size
sleep 1
echo $Side
sleep 1
echo $Symbol
) | display_orders | mailx -s 'Daily OATS Check' [email protected]

É claro que o sono 1 pode ser alterado para um valor mais longo e $BROKERA , $SIZE , $Side e $Symbol já estão definidos. É um ataque porque não tem nenhum feedback para verificar se está respondendo a pergunta certa, e é lento e geralmente yuk, mas provavelmente não tem nenhum pré-requisito especial de software além do que está na maioria dos sistemas)

    
por 11.02.2013 / 09:02