sudo ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
端末で上記のコマンドを実行すると、正しい「内部」IPアドレスが出力されます。たとえば、別名として渡そうとすると、次のようになります。
alias intip='sudo ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}''
次のエラーが発生します。
alias: addr: | cut -d: -f2 | awk { not found
alias: print not found
alias: } not found
私がここで何を間違っているのか?
答え1
重要な場所に二重引用符と一重引用符を使用する際の問題:
alias lsa="ls -l | awk '{print \$1}' "
答え2
あなたが間違っているのは、エイリアスを使用してコマンドに短い名前を付けるか、自動的にコマンドに引数を渡すよりも複雑な操作を実行することです。代わりに関数を使用すると、参照について心配する必要はありません。
intip () {
/sbin/ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
}
ここでは sudo は必要なく、ifconfig
表示するだけでは権限は必要ありません。ただし、多くのディストリビューションではフルパスを提供する必要がありますが、ifconfig
root以外のユーザーにはそうでないことがよくあります。PATH
ところで、awkで完全にフィルタリングを行うことができますが、そのような方法がより楽な場合は、さまざまなツールを自由に使用してみてください。 1つの方法は次のとおりです。
intip () {
/sbin/ifconfig wlan0 | awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}
インターフェイス名を関数のオプションのパラメータとして簡単に渡すことができます。
intip () {
/sbin/ifconfig "${1:-wlan0}" |
awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}
エイリアスが機能しない理由を説明するために、一重引用符を使用してエイリアスを区切り、エイリアステキストに使用します。通訳者はあなたの心を読むことができず、予想される内容を見ることができません。バラよりargsと「終了しない引用文字列」/「予期しないEOF」から読み取ったコマンドを使用してsh(ダッシュ)からbashを呼び出す引用文の中に引用文がある場合もありますエコーが引用符を無視するのはなぜですか?4つの文字を入力して、一重引用符で囲まれた文字列に一重引用符を効果的に含める方法を学びます'\''
。
答え3
またはインストールすることができますmoreutils
(少なくともディストリビューションで利用可能な場合)ifdata
。
$ ifdata -pa br0
172.16.1.244
もちろん、br0の代わりにwlan0を使用することもできます。