
Preciso obter o endereço IP eth1 do meu servidor Linux remoto usando o script bash por meio do ssh e tenho o seguinte comando: /sbin/ifconfig eth1 | grep 'endereço inet:'| grep -v '127.0.0.1' | cortar -d: -f2 | awk '{imprimir $1}'
mas quando eu corro:
spawn ssh -t $user@$remote_host "/sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $2}' ; echo $ip " diz que não é possível ler "1": nenhuma variável durante a execução de "spawn ssh -t $user@$remote_host "ip= /sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
; echo $ip "" (arquivo "./ssh2.sh" linha 11)
Então, por favor, poderia me ajudar com esse problema. Obrigado
Responder1
Por que não usar ip
em vez do obsoleto ifconfig
e pular todos os greps e cortes extras, já que o awk pode fazer isso.
Então um comando comoip addr show dev eth0 | awk '/^ +inet / {split($2,a,"/"); print a[1]}'
De qualquer forma, a maior parte do seu problema nos comandos de exemplo tem a ver com o tipo de aspas que você escolhe e como o bash as avalia.
Se você fizer algo assim cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER"
, a saída que verá será Hello cfrancy
, e não Hello root
como você poderia esperar. Como você usou aspas duplas "
em seu comando para o sistema remoto, todas as variáveis são avaliadasanteso comando é enviado. O comando cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER'
retornará Hello root
desde que $USER
seja avaliado no site remoto. É claro que você também precisa alternar ou escapar de suas outras aspas dentro do comando composto para que as coisas funcionem corretamente.
De qualquer forma, mantendo o comportamento de cotação em mente, o comando provavelmente faria o que você deseja. embora eu ache que minha solução usa apenas ip
, e awk
é uma escolha melhor, já que estou usando apenas 2 programas em vez de 4.
ssh -t $user@$remote_host '/sbin/ifconfig eth0 | grep "inet addr:"| grep -v "127.0.0.1" | cut -d: -f2 | awk "{ print $1}"'