Awk は、ホスト名 -I を使用すると「そのようなファイルまたはディレクトリはありません」というエラーをスローします。

Awk は、ホスト名 -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)}'
    

    ここで、は 0 個以上の追加アドレスを示します。これは5.6.7.8スクリプトとして扱われ、9.10.11.12 … '{printf(MYHOST)}'解析される複数のファイルとして扱われます。エラーには、存在しない最初の「ファイル」が示されます (例 ) cannot open '9.10.11.12' (No such file or directory)

    あなたの場合にはこれが起こりました。

関連情報