Comando ssh remoto não enviando a variável echo a partir de um script ksh no AIX

1

Eu preciso obter o valor de uma variável de um host remoto em um script usando SSH e ter que primeiro criar um arquivo de ambiente que faça uma mudança no final de sua execução.

O comando funciona localmente e posso ver o que está fazendo com um echo . Passei um bom dia pesquisando isso e testando todas as combinações de aspas simples e duplas que consegui encontrar. Espero que alguém tenha uma solução rápida.

O primeiro comando SSH retorna "YES", que é o que eu espero. Como faço para obter a segunda variável para o host remoto sem que ele seja expandido?

Aqui está o script:

#!/bin/ksh
set -x
SIDHost=p16
ThisSID=test
ssh -q $SIDHost ". /tmp/useq $ThisSID; echo \$HOST_IS_ERPDB"
ERPTest='ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"'

Execução de script:

+ SIDHost=p16
+ ThisSID=test
+ ssh -q p16 . /usr/vmmc/bin/oracle_scripts/useq test; echo $HOST_IS_ERPDB
YES
+ + ssh -q p16 . /usr/vmmc/bin/oracle_scripts/useq test; echo NO
ERPTest=NO
    
por Rob Safran 23.12.2014 / 00:22

1 resposta

1

Dentro dos backticks, uma barra invertida cita o próximo caractere. Então você está recebendo a saída do comando

ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo $HOST_IS_ERPDB"

Você precisa de \ :

ERPTest='ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"'

para que ERPTest seja definido para a saída do comando

ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"

Como alternativa, use $(…) em vez do obsoleto '…' . Observe que, em algumas versões do AIX, talvez seja necessário usar /bin/sh ou ksh93 em vez do antigo /bin/ksh .

ERPTest=$(ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB")
    
por 23.12.2014 / 00:45