Awk arroja "No existe tal error de archivo o directorio" cuando se usa el nombre de host -I

Awk arroja "No existe tal error de archivo o directorio" cuando se usa el nombre de host -I

Este comando funciona bien, imprime el nombre de host

awk -v MYHOST=$(hostname) '{printf(MYHOST)}'

Sin embargo al correr

awk -v MYHOST=$(hostname -I) '{printf(MYHOST)}'

lanza un

awk: cannot open "ip address" (No such file or directory)

Respuesta1

DeberíaUtilice siempre comillas dobles en las sustituciones de comandos.. El siguiente comando está corregido, no arrojará el error:

awk -v MYHOST="$(hostname -I)" '{printf(MYHOST)}'

Sin $(hostname -I)comillas, estos son posibles resultados (después de la expansión):

  • awk -v MYHOST= '{printf(MYHOST)}'
    

    Esto funcionará formalmente.

  • awk -v MYHOST=1.2.3.4 '{printf(MYHOST)}'
    

    Esto funcionará formalmente.

  • awk -v MYHOST=1.2.3.4 5.6.7.8 '{printf(MYHOST)}'
    

    Esto se tratará 5.6.7.8como un script y {printf(MYHOST)}como un archivo para analizar. El error será como cannot open '{printf(MYHOST)}' (No such file or directory), a menos que exista dicho archivo.

  • awk -v MYHOST=1.2.3.4 5.6.7.8 9.10.11.12 … '{printf(MYHOST)}'
    

    donde indica cero o más direcciones adicionales. Esto se tratará 5.6.7.8como un script y 9.10.11.12 … '{printf(MYHOST)}'como varios archivos para analizar. El error mencionará el primer "archivo" inexistente, por ejemplo cannot open '9.10.11.12' (No such file or directory).

    Esto es lo que pasó en tu caso.

información relacionada