alias ip="ifconfig eth0 | grep '255$' | awk '{print '\$2'}'"
alias
パラメータなしでコマンドを使用すると、次の結果が得られます。
alias ip='ifconfig eth0 | grep '\' '255$'\'' | awk '\''{print '\''$2'\''}'\'''
しかし、実行するip
と
inet xxx.xxx.x.xxx netmask xxx.xxx.xxx.x broadcast xxx.xxx.x.xxx
を実行すると、ifconfig eth0 | grep '255$' | awk '{print '\$2'}'
同じIPだけが正常に取得できますxxx.xxx.x.xxx
。
私はこの状況が混乱しています。助けてください?
答え1
そのすべての引用地獄の後にあなたが実行することになるのはawk '{print }'
。これは、エイリアス割り当てでは、\$2
バックスラッシュが拡張を防止する二重引用符で囲まれた文字列にあるためです$2
。ただし、エイリアスを使用すると、インタラクティブシェルで空になる可能性がある現在の場所引数に引用符が解放され、$2
拡張されます。$2
引数のないコマンドはprint
入力行全体を印刷します。
最も見やすいものは次のとおりですset -x
。
$ set -x
$ ip
+ grep '255$'
+ /sbin/ifconfig eth0
+ awk '{print }'
inet ... netmask 255.0.0.0 broadcast 10.255.255.255
(そしてそのインターフェイスのネットマスクが間違っているようです。)
関数を使用すると、このようなことを行う方が簡単です。コマンド全体を引用する必要がないからです。
myip() {
ifconfig eth0 | grep '255$' | awk '{print $2}'
}
しかし、awk
grepが行うことを行うことは可能です。おそらく一致してはいけませんが、キーワードは一致する必要が255
ありますinet
。
myip() {
ifconfig eth0 | awk '/inet/ {print $2}'
}
またはもっと明確に言えば:
myip() {
ifconfig eth0 | awk '$1 == "inet" {print $2}'
}
これは行の一致も/inet/
防ぎますinet6
。
ip
これは別のユーティリティ。
答え2
私はコンピュータにコピーしましたが、試してみることができますか?
alias ip="ifconfig eth0 | grep '255$' | awk '{print \$2}'"
これは私にとって効果的です。
ぜひsource .bashrc
更新してください