Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

digやhostコマンドが劇的に便利になるbash関数を作りました

ブラウジング中にふとDNSレコードを調べようとする時、ドメインやホスト名だけを切り出すのは手間ですよね。
そこで、digやhostコマンドの引数にhttp://などが含まれていても動くbash関数を作りました。

実行サンプル

hostやdigコマンドが、ブラウザのURL欄からコピペしたままで動きます!

$ host http://www.yahoo.co.jp/
www.yahoo.co.jp is an alias for www.g.yahoo.co.jp.
www.g.yahoo.co.jp has address 203.216.231.189
$ dig http://www.yahoo.co.jp/

; <<>> DiG 9.8.3-P1 <<>> www.yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52306
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.yahoo.co.jp.     IN  A

;; ANSWER SECTION:
www.yahoo.co.jp.  199 IN  CNAME   www.g.yahoo.co.jp.
www.g.yahoo.co.jp.    19  IN  A   203.216.243.240

;; AUTHORITY SECTION:
www.g.yahoo.co.jp.    585 IN  NS  gns01.yahoo.co.jp.

;; ADDITIONAL SECTION:
gns01.yahoo.co.jp.    666 IN  A   118.151.254.132

;; Query time: 20 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Apr 25 20:08:13 2013
;; MSG SIZE  rcvd: 105

もちろん引数付きの以下のコマンドにも対応しています。

  • $ host -t ns http://nifty.com/
  • $ host http://nifty.com/ -t ns
  • $ dig mx http://www.nifty.com/
  • $ dig http://www.nifty.com/ mx

利用方法

.bash_profileなどに後述のコードを追加してください。
その後に追加内容を反映するため、ターミナルを立ち上げ直すか、
source ~/.bash_profileを行ってください。準備は以上です。

$ vi ~/.bash_profile
$ source ~/.bash_profile

コード

function host() {
  bin=`which host`
  check_host=`echo $@ | perl -lpe 's/(.* )?https?:\/\/([^ ^\/]+)[^ ]*( .*)?/$1$2$3/'`
  $bin $check_host
}

function dig() {
  bin=`which dig`
  check_host=`echo $@ | perl -lpe 's/(.* )?https?:\/\/([^ ^\/]+)[^ ]*( .*)?/$1$2$3/'`
  $bin $check_host
}

参考サイト

エイリアスの代替としての関数 / bashメモ
http://d.hatena.ne.jp/perlcodesample/20091016/1248437426