Awk lança "Nenhum erro de arquivo ou diretório" ao usar hostname -I

Awk lança "Nenhum erro de arquivo ou diretório" ao usar hostname -I

Este comando funciona bem, imprima o nome do host

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

Porém ao correr

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

lança um

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

Responder1

Você devesempre use aspas duplas nas substituições de comandos. O seguinte comando foi corrigido, não gerará o erro:

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

Sem $(hostname -I)aspas, estes são os resultados possíveis (após expansão):

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

    Isso funcionará formalmente.

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

    Isso funcionará formalmente.

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

    Isso será tratado 5.6.7.8como um script e {printf(MYHOST)}como um arquivo a ser analisado. O erro será semelhante cannot open '{printf(MYHOST)}' (No such file or directory), a menos que exista tal arquivo.

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

    onde indica zero ou mais endereços adicionais. Isso será tratado 5.6.7.8como um script e 9.10.11.12 … '{printf(MYHOST)}'como vários arquivos a serem analisados. O erro mencionará o primeiro "arquivo" inexistente, por exemplo cannot open '9.10.11.12' (No such file or directory).

    Foi o que aconteceu no seu caso.

informação relacionada