Nav*_*nis 0 bash alias bashrc ip awk
从这个问题可以看出,以下命令给出了系统的 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}'"
Run Code Online (Sandbox Code Playgroud)
但是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
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它产生相同的输出?
问题是 (预期 awk变量)在声明时被 shell$NF扩展,而不是在稍后调用时。因此,最终被声明为:aliasalias
alias ipconfig="ip route get 8.8.8.8 | awk '{print}'"
Run Code Online (Sandbox Code Playgroud)
这print显然将整个记录。
您需要通过任何常用的转义机制来防止过早扩展,这里我使用的是反斜杠 -- \:
$ alias ipconfig="ip route get 8.8.8.8 | awk '{print \$NF}'"
$ ipconfig
192.168.2.6
Run Code Online (Sandbox Code Playgroud)
或者,如果您觉得有利,您可以使用丑陋的单引号技巧:
$ alias ipconfig='ip route get 8.8.8.8 | awk '\''{print $NF}'\'''
$ ipconfig
192.168.2.6
Run Code Online (Sandbox Code Playgroud)
作为旁注,您应该只alias在进行简单的替换时,对于任何复杂的情况,您应该真正考虑利用函数,它们的可读性和可靠性要高得多。例如,这个可以简单地采用以下形式(忘记引用和其他技巧):
$ ipconfig() { ip route get 8.8.8.8 | awk '{print $NF}' ;}
$ ipconfig
192.168.2.6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |