Dieser Befehl funktioniert einwandfrei und druckt den Hostnamen
awk -v MYHOST=$(hostname) '{printf(MYHOST)}'
Beim Laufen jedoch
awk -v MYHOST=$(hostname -I) '{printf(MYHOST)}'
wirft einen
awk: cannot open "ip address" (No such file or directory)
Antwort1
Du solltestVerwenden Sie immer doppelte Anführungszeichen um Befehlsersetzungen. Der folgende Befehl ist behoben, er verursacht den Fehler nicht:
awk -v MYHOST="$(hostname -I)" '{printf(MYHOST)}'
Ohne $(hostname -I)
Anführungszeichen sind dies mögliche Ergebnisse (nach der Erweiterung):
awk -v MYHOST= '{printf(MYHOST)}'
Dies wird formal funktionieren.
awk -v MYHOST=1.2.3.4 '{printf(MYHOST)}'
Dies wird formal funktionieren.
awk -v MYHOST=1.2.3.4 5.6.7.8 '{printf(MYHOST)}'
5.6.7.8
Dies wird als Skript und{printf(MYHOST)}
als zu analysierende Datei behandelt . Der Fehler lautet wie folgtcannot open '{printf(MYHOST)}' (No such file or directory)
, sofern keine solche Datei vorhanden ist.awk -v MYHOST=1.2.3.4 5.6.7.8 9.10.11.12 … '{printf(MYHOST)}'
wobei
…
null oder mehr zusätzliche Adressen angibt. Dies wird5.6.7.8
als Skript und9.10.11.12 … '{printf(MYHOST)}'
als mehrere zu analysierende Dateien behandelt. Der Fehler erwähnt die erste nicht vorhandene „Datei“, z. B.cannot open '9.10.11.12' (No such file or directory)
.Dies ist in Ihrem Fall passiert.