我正在为我的终端创建一些别名,以输出不同的 IP 地址。其中两个工作正常,但我的默认网关别名不会返回干净的响应。
alias inet="hostname -I | awk '{print $3}'"
返回:192.168.xxx.xx
按预期
alias pubip="curl ifconfig.me"
返回:354.xxx.xx.xx
按预期
但是我创建的别名返回的是默认网关 IP
alias def="ip r | grep default | awk '{print $3}'"
返回:default via 192.168.xxx.xxx dev eth0
我在终端中使用相同的行,它将按预期返回默认网关。
但是当它被存储为别名时,脚本的“awk”部分不起作用。
我不能在别名中两次使用管道吗?我的代码中还有其他问题吗?
答案1
在别名定义中,$3
在定义别名时实际上会展开(尽管乍一看似乎并非如此)。如果您alias
在定义别名后键入(以查看已定义的别名),您将看到您的别名实际上具有以下形式
alias def='ip r | grep default | awk '\''{print }'\'''
并且由于print
中只有,因此将打印awk
返回的整行。grep
使用以下内容定义别名:
alias def="ip r | grep default | awk '{print \$3}'"
那么你的别名将具有以下形式:
alias def='ip r | grep default | awk '\''{print $3}'\'''
它就会按照你想要的方式工作。