Script Bash com ssh não retornando valor das variáveis

0

Estou trabalhando em um script bash para ajudar a migrar máquinas virtuais KVM, mas usarei um código falso para explicar o que está acontecendo.

Estou usando funções para dividir as tarefas executadas em servidores remotos e para obter as informações necessárias do usuário enquanto exibo as informações que o usuário precisa para responder às perguntas. Abaixo, três scripts apenas para mostrar as três maneiras com que trabalhei para descobrir o que está acontecendo.

O primeiro não envolve nenhum ssh e funciona como deveria

#!/bin/bash

getname()
{
echo -n "Name:  "
read name
}

gethobby()
{
echo -n "hobby:  "
read hobby
}

showresults()
{
echo "$name"
echo "$hobby"
}

getname
gethobby
showresults

Este segundo script é o jeito que estou tentando fazer funcionar. Eu estarei executando uma função em um servidor remoto por ssh, mas os valores das variáveis não são acessíveis de outras funções como eu preciso que eles sejam

#!/bin/bash
server1='10.1.1.153'

getname()
{
echo -n "Name:  "
read name
}

gethobby()
{
uptime
echo -n "hobby:  "
read hobby
}

showresults()
{
echo "$name"
echo "$hobby"
}

getname
echo -n "server: "
read sname
ssh -t sysadmin@"${!sname}" "$(typeset -f); gethobby"
showresults

Este terceiro script funciona, mas não é algo que seria usado na produção, eu acho. Devido a ter que executar um monte de ssh com comandos, há linhas de desconexão em todo o lugar, o que torna a saída confusa. Embora com esse método eu possa acessar os valores que preciso das variáveis.

#!/bin/bash
server1='10.1.1.153'

getname()
{
    echo -n "Name:  "
    read name
}

gethobby()
{
    ssh -t sysadmin@"${!sname}" "$(typeset -f); uptime"
    echo -n "hobby:  "
    read hobby
}

showresults()
{
    echo "$name"
    echo "$hobby"
}

getname
echo -n "server: "
read sname
gethobby
showresults

Então, há alguma maneira de fazer o script 2 funcionar?

Atualização: Sim, eu sei que o teste é um nome ruim e usá-lo é ruim, mas este não é o código real, já que o código atual é muito maior e mais complicado.

Você pode estar certo sobre a parte da função, mas eu tive muitos programas que trabalharam com o trabalho da função ssh user @ ip. Acredito que funcione já que ele se expande e apenas executa todas as coisas dentro da função sem ter que executar comandos individuais ssh.

O segundo script funciona, exceto para obter o valor de volta da função. Está vazio ao ecoar em vez de ter o valor que o usuário insere.

    
por J. Does 17.09.2015 / 20:57

1 resposta

5

Você teria que definir a função na máquina remota :

remote_hobby=$( ssh -t sysadmin@"${!name}" bash -c 'test2() { read -p "Hobby: " hobby; }; test2; echo "$hobby"' )
    
por 17.09.2015 / 21:22