场景很简单, 通过一个命令别名(alias)直接输出当前的机器的ip地址.
不需要使用ifconfig命令, 用ping就可以了. (更简单用 hostname -i 命令即可.)
ping -c 1 命令用来指定只ping一次, 后面是机器名或者域名.
查看机器名的命令是 hostname, 所以很简单, 直接
1 | ping -c 1 `hostname` |
就可以得到ip地址的信息了.
1 2 3 4 5 | PING jiacheo ( 192.168 . 0.22 ) 56 ( 84 ) bytes of data. 64 bytes from jiacheo ( 192.168 . 0.22 ): icmp_seq= 0 ttl= 64 time= 0.034 ms --- jiacheo ping statistics --- 1 packets transmitted, 1 received, 0 % packet loss, time 0m rtt min/avg/max/mdev = 0.034 / 0.034 / 0.034 / 0.000 ms, pipe 2 |
然后我只需要显示第一行的 (192.168.0.22)就可以了. 这时需要用到awk
1 | ping -c 1 `hostname` | awk '{if(NR==1) pirnt $3}' |
执行结果:
1 | ( 192.168 . 0.22 ) |
貌似没什么问题.
使用alias:
编辑~/.bashrc 文件, 最后加入
1 | alias ip="ping -c 1 `hostname` | awk '{if(NR==1) pirnt $3}' |
保存后, source ~/.bashrc 一下(或者重新登录终端)
在命令控制台敲入: ip 回车后显示
1 | PING jiacheo ( 192.168 . 0.22 ) 56 ( 84 ) bytes of data. |
奇怪了, 开始怀疑是awk没有识别出分隔符.
后来想想, 在.bashrc里面定义的 环境变量都是可以用$var 来引用的, 这里的$是不是需要转义
在英明伟大神武牛叉轰轰的 莹莹的指导下, 果然是$符号的问题, 要转义一下就可以了. 转义的方法就是 在前面加个\
1 | alias ip= "ping -c 1 `hostname` | awk '{if(NR==1) pirnt \$3}'" |
输出结果:
1 | ( 192.168 . 0.22 ) |
蛋疼扯了这么多, 就说明一个道理, 在定义alias的时候, 要注意特殊符号需要转义. 嗯.