Как установить Псевдоним в bashrc так, чтобы Системный IP мог быть найден с помощью простой команды псевдонима?

Как замечено от этого вопроса, следующая команда дает 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 

Как я могу заставить это производить тот же вывод?

0
задан 24 July 2017 в 22:14

1 ответ

Проблема состоит в том, что (предназначил 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
5
ответ дан 2 November 2019 в 21:25

Другие вопросы по тегам:

Похожие вопросы: