Awk выдает ошибку «Нет такого файла или каталога» при использовании hostname -I

Awk выдает ошибку «Нет такого файла или каталога» при использовании hostname -I

Эта команда отлично работает, печатая имя хоста

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

Однако при запуске

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

бросает

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

решение1

Вам следуетвсегда используйте двойные кавычки при замене команд. Следующая команда исправлена, она не будет выдавать ошибку:

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

При $(hostname -I)отсутствии кавычек возможны следующие результаты (после расширения):

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

    Формально это будет работать.

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

    Формально это будет работать.

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

    Это будет рассматриваться 5.6.7.8как скрипт и {printf(MYHOST)}как файл для анализа. Ошибка будет выглядеть так cannot open '{printf(MYHOST)}' (No such file or directory), если такого файла нет.

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

    где указывает ноль или более дополнительных адресов. Это будет рассматриваться 5.6.7.8как скрипт и 9.10.11.12 … '{printf(MYHOST)}'как несколько файлов для анализа. Ошибка будет упоминать первый несуществующий "файл", например cannot open '9.10.11.12' (No such file or directory).

    Именно это и произошло в вашем случае.

Связанный контент