
Necesito obtener la dirección IP eth1 de mi servidor Linux remoto usando un script bash a través de ssh y tengo el siguiente comando: /sbin/ifconfig eth1 | grep 'dirección inet:'| grep -v '127.0.0.1' | cortar -d: -f2 | awk '{imprimir $1}'
pero cuando ejecuto:
generar ssh -t $usuario@$remote_host "/sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $2}' ; echo $ip "dice que no se puede leer "1": no existe dicha variable mientras se ejecuta "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 "" (archivo "./ssh2.sh" línea 11)
Entonces, ¿podría ayudarme con este problema? Gracias
Respuesta1
¿Por qué no utilizar ip
en lugar del obsoleto ifconfig
y omitir todos los greps y cortes adicionales ya que awk puede hacer eso?
Entonces un comando comoip addr show dev eth0 | awk '/^ +inet / {split($2,a,"/"); print a[1]}'
En cualquier caso, la mayor parte de su problema en los comandos de ejemplo tiene que ver con el tipo de comillas que elige y cómo las evalúa bash.
Si hace algo así cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER"
, el resultado que verá será Hello cfrancy
, y no Hello root
como cabría esperar. Debido a que ha utilizado comillas dobles "
en su comando para el sistema remoto, se evalúan todas las variables.antesse envía el comando. El comando cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER'
regresará Hello root
ya que $USER
se evalúa en el sitio remoto. Por supuesto, también necesitas cambiar o escapar de tus otras comillas dentro de tu comando compuesto para que todo funcione correctamente.
De todos modos, teniendo en cuenta el comportamiento de las citas, el comando probablemente haría lo que usted desea. aunque creo que mi solución usa solo ip
, y awk
es una mejor opción ya que solo uso 2 programas en lugar 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}"'