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