Tema del script Bash
scripting awk (5)
Puedo ejecutar este comando bien, con la salida que quiero:
ifconfig eth0 | grep HWaddr | awk ''{print $5}''
Sin embargo, cuando configuro el comando a una variable e imprimo la variable, aparece un error:
CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk ''{print /$5}''`
$CASS_INTERNAL
my internal xxx ip: command not found
Lo extraño: mi IP interna realmente aparece. ¿Cómo hago esto sin obtener un error? No debería importar, pero estoy usando la última versión de Ubuntu.
¿tal vez quieres
echo $CASS_INTERNAL
No está imprimiendo la variable, la está ejecutando como un nombre de comando. Estas buscando
echo "$CASS_INTERNAL"
(Adquiera el hábito de poner siempre comillas dobles para las sustituciones de variables).
Nota de shell más avanzada: en este caso no importa, pero en general el echo
puede tener problemas con algunos caracteres especiales ( -
y //
), por lo que es mejor usar el siguiente comando más complicado pero totalmente confiable:
printf "%s/n" "$CASS_INTERNAL"
no tienes que usar grep
ifconfig eth0 | awk ''/HWaddr/{print $5}''
CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk ''{print /$5}''`
echo $CASS_INTERNAL
Tu:
$CASS_INTERNAL
Intentaría ejecutarlo como un comando.
Bueno, primero grep para HWaddr, por lo que el quinto campo en esta línea es la dirección MAC del adaptador de red en cuestión, no su dirección IP local.
Otros han sugerido que la solución es simplemente hacer eco del resultado, lo que significa que si eth0 en este ejemplo no está disponible en el momento en que se ejecuta la línea, no funcionará.
Por lo que entiendo, en su lugar, desea poner la línea de comando deseada en una variable, y luego evaluarla más adelante. Este patrón se denomina comúnmente evaluación perezosa , y es posible en bash mediante el uso de eval builtin:
#put the desired command in variable
CASS_INTERNAL=''ifconfig eth0 | grep HWaddr | awk "{print /$5}"''
# ....
#at later on - evaluate its contents!
eval $CASS_INTERNAL
11:22:33:aa:bb:cc