Как замечено от этого вопроса, следующая команда дает IP-адрес системы. ip route get 8.8.8.8 | awk '{print $NF; exit}'
Я хотел использовать эту команду для создания псевдонима так, чтобы я не вводил такую долгую команду каждый раз. Так, я добавил следующую строку в .bashrc
alias ipconfig="ip route get 8.8.8.8 | awk '{print $NF; exit}'"
Но я сталкиваюсь с проблемой с awk
управляйте, когда я использую его с псевдонимом (а именно, я думаю, что переменная $NF не установлена. Я обеспечил три версии вывода с помощью командной строки и псевдонима набора для лучшего понимания.
dennis@dennis-HP:~$ ip route get 8.8.8.8 | awk '{print $NF; exit}'
192.168.0.X
dennis@dennis-HP:~$ ipconfig
8.8.8.8 via 192.168.0.Y dev wlx9d5d8eae8f64 src 192.168.0.X
dennis@dennis-HP:~$ ip route get 8.8.8.8
8.8.8.8 via 192.168.0.Y dev wlx9d5d8eae8f64 src 192.168.0.X
cache
Как я могу заставить это производить тот же вывод?
Проблема состоит в том, что (предназначил awk
переменная) $NF
расширяется оболочкой в alias
время объявления, не при вызове позже. Так, alias
в конечном счете объявляется как:
alias ipconfig="ip route get 8.8.8.8 | awk '{print}'"
и это будет print
целая запись, очевидно.
Необходимо предотвратить преждевременное расширение любым обычным механизмом выхода, здесь я использую обратную косую черту- \
:
$ alias ipconfig="ip route get 8.8.8.8 | awk '{print \$NF}'"
$ ipconfig
192.168.2.6
Или если Ваше выгодное чувство, можно играть с ужасными взломами одинарной кавычки:
$ alias ipconfig='ip route get 8.8.8.8 | awk '\''{print $NF}'\'''
$ ipconfig
192.168.2.6
Как примечание стороны, Вы должны только alias
при создании простых замен, для любых сложных случаев, необходимо действительно посмотреть на усиление функций, они намного более читаемы и надежны. Например, этот мог просто принять следующую форму (забудьте о заключении в кавычки и других взломах):
$ ipconfig() { ip route get 8.8.8.8 | awk '{print $NF}' ;}
$ ipconfig
192.168.2.6