Como inserir um script bash na linha de comando, mas não processar o script até que o script inteiro seja inserido

2

Estou realizando alguns testes interativos usando o QuickTest Professional e o Linux da HP. Estou conectando via SSH e alimentando as linhas de script BASH diretamente na linha de comando.

O problema que estou tendo é que o script é executado quando é digitado. Estou tentando encontrar uma maneira de alimentar o script na linha de comando, mas salvar a execução até que todo o script esteja completo.

Alguém tem alguma experiência em fazer isso? Eu admito, não é a maneira ideal de fazer isso, mas é o que eu estou enfrentando no momento. Qualquer outra sugestão é bem vinda.

Obrigado!

    
por MHGL 18.03.2010 / 17:27

6 respostas

3

Se você realmente não puder gravar um arquivo de script no sistema, poderá agrupar seus comandos entre parênteses:

 ( ls; echo this; echo that; )

mesmo negócio, multilinha:

(
ls
echo this
echo that
)
    
por 18.03.2010 / 17:35
3

Você também pode envolver seu script em chaves se não quiser que ele seja executado em um subshell:

{
echo one
echo two
}

Outra maneira é canalizar um eco para sh ou bash :

echo '
echo one
echo two
' | bash

ou use eval :

eval '
echo one
echo two
'

Editar:

Isso também funciona:

bash <<EOF
echo one
echo two
EOF
    
por 18.03.2010 / 17:45
1

cat test.sh | ssh [email protected] '/bin/bash -'

Mas, se você pode ssh, você pode simplesmente SCP o script completo de qualquer maneira? Edite, e se você não pode SCP, você pode:

cat test.sh | ssh [email protected] 'cat > test.sh'

    
por 18.03.2010 / 17:31
0

Não familiarizado com o "HP QuickTest Professional", mas o que impede você de gravá-lo em um arquivo e executá-lo?

    
por 18.03.2010 / 17:30
0

Eu olhei para batch - ele faz quase exatamente o que você quer.

    
por 18.03.2010 / 18:47
0

Isso realmente depende do que você entende por "não executar até que você tenha dado todas as linhas". Bash é uma linguagem interpretada (não compilada), portanto não importa de que maneira você a faça, shell irá ler e executar linhas uma por vez, cada comando irá gerar seu próprio código de retorno independentemente, independentemente de você colocar esses comandos em subshells ou outras coisas.

Então, o que eu suspeito que você esteja realmente perguntando é:

(a) existe uma maneira de você reunir toda a saída em uma área de tela sem interrupção

(b) existe uma maneira de você ter que pressionar a tecla "Enter" uma vez para ter todos os comandos em sequência

Se você juntar cada linha de comando separada por um ponto-e-vírgula ';' então isso tem o mesmo efeito que executá-los em linhas diferentes. Então encadeie todos juntos em uma linha e pressione "Enter" uma vez no final. Você pode fazer isso manualmente digitando ou pode processar seu script de shell por meio de uma ferramenta (como sed ou tr) para substituir caracteres de fim de linha por ponto-e-vírgula e, em seguida, alimentar o resultado em ssh. No seu host local, execute o seguinte:

cat script.sh | tr "\ n" ';' | ssh [host remoto]

Observe que isso não cria um shell interativo no host remoto, ele apenas executa os comandos do script e, em seguida, retorna o controle para o host local.

    
por 27.08.2013 / 23:10