2012-06-29
■[Ruby][Linux]shellに設定しておくと幸せになれるaliasをいくつか。
ご無沙汰しております。生きてます。
スクリプトを書いてパスを通しておくと、どこにいても呼び出せるので便利。なんだけど、短いやつなら.zshrcとか.bashrcとかのaliasとして書いておくと管理がラク。自分の.zshrcに書いてあるaliasをいくつか紹介。ちなみに、Mac + zsh環境。
コマンドを短くする系
こういうのは、よくやると思う。
alias r=rails
alias g=git
下のように使える。
% r g scaffold happy title:string expire_in:integer
% g status
よく使うコマンドのタイプ量を減らしておけば、計画停電にも耐えられるかもしれない。
オプションを付けとく系
これもよくあると思う。
alias ls='ls -G'
lsって打ったときに、ls -Gの効果が発揮されて、Greatな表示になる。常時付けとくオプションをタイプしなくていいようにしておけば、計画停電にも耐えられるかもしれない。
一発ログイン系
こんなの。
alias dev='ssh -p 22 -l shunsuk dev.shunsuk.net'
ターミナルでdevと打つだけでサーバーにログインできる。コレ系は症状が悪化するとパスワードとか書いて、.zshrcを人に見せれなくなる。もっと悪化すると誤ってWebで一般公開してしまう。停電してほしい。
独自コマンド系
複数のコマンドを組み合わせて独自のコマンドを作る。
alias rgrep='find . -name "*.svn*" -prune -o -type f -print0 | xargs -0 grep'
これは、カレントディレクトリ以下を再帰的に検索するrgrepというコマンドを作ってる。.svnの中は検索しないようにしつつ。パイプ "|" で繋いでいく。使い方は。
% rgrep happy
本文中に "happy" と書いてあるファイルの名前と該当行が表示される。現在の情報化社会では、あえて停電させた方がいいかもしれない。
- 作者: ウィリアム・パワーズ,有賀裕子
- 出版社/メーカー: プレジデント社
- 発売日: 2012/01/27
- メディア: 単行本
- 購入: 2人 クリック: 53回
- この商品を含むブログを見る
いつでもどこでもWebサーバーを起動したい系
スタバで待ち合わせをしている時など、ふとWebサーバーを起動したくなる時があると思う。RubyにはWebrickというWebサーバーを書くためのライブラリが用意されていて、かんたんにオレオレWebサーバーを書くことができる。
ここのコードはこんな感じ。これだけでpublic_htmlディレクトリに入れたHTMLファイルにhttp://localhost:8000からアクセスできるようになる。
#!/usr/bin/env ruby require 'webrick' include WEBrick s = HTTPServer.new( :Port => 8000, :DocumentRoot => File.join(Dir::pwd, "public_html") ) trap("INT"){ s.shutdown } s.start
これを1行で書く。セミコロンとかで区切ればいいんだろうけど、ワンライナーで。DocumentRootをコマンドライン引数で指定できるようにした。デフォルトはhtmlディレクトリ。
WEBrick::HTTPServer.new(Port: 8000, DocumentRoot: File.join(Dir::pwd, ARGV.shift || 'html')).tap {|s| trap('INT') { s.shutdown } }.start
これを使って、いつでもどこでもWebサーバーなコマンドを作る。
alias rserver="ruby -r webrick -e \"WEBrick::HTTPServer.new(Port: 8000, DocumentRoot: File.join(Dir::pwd, ARGV.shift || 'html')).tap {|s| trap('INT') { s.shutdown } }.start\""
Webサーバーを起動する時は。
% rserver happy
これでWebサーバー経由でhappyディレクトリにアクセスできる。ついでにポート番号も引数にすれば、複数のサーバーを同時に起動できる。
CGIも動くのでHaskell作ったCGIをサクッと試せる。停電でネットにつながらなくてもローカルでいろいろできる。
- HaskellでWebアプリを作ってみた Vol.1(ライブラリ使わない編) - このブログは証明できない。
- HaskellでWebアプリを作ってみた Vol.2(Network.CGI編) - このブログは証明できない。
- HaskellでWebアプリを作ってみた Vol.3(Text.XHtml編) - このブログは証明できない。
追記:
シェル関数というのを定義するとワンライナーじゃなくていいそうです。いつも無意識のうちにls、ls、って打ってるのに、しぇるのこと全然わかってなかったです。具体例はコメント欄で!
業務を効率化する系
すごく便利なスクリプトがある。
このコードを書いたファイルをどこかに置いてパスを通しておくといいんだけど、案の定1行で書いてaliasにする。まず、微妙に変えつつ1行で。
STDIN.readlines.map(&:chomp).tap{|lines| puts eval(ARGV.shift || '') }
そしたらaliasに。
alias firter="ruby -e \"STDIN.readlines.map(&:chomp).tap{|lines|puts eval(ARGV.shift || '')}\""
使い方は変わらない。例えば、テキストファイルの中からHappy!が含まれる行だけ表示するには。
cat happy_hacking.txt | firter "lines.select {|x| x =~ /Happy!/ }"
cat development.log | firter "lines.select{|x|x =~ /GET/}.map{|x|[x[/\d{4}-\d{2}-\d{2}/],1]}.reduce({}){|h,x|h.merge(Hash[*x]){|k,a,b|a+b}}.map{|k,v|%<|#{k}|#{v}|>}"
Rubyなのでもっといい書き方があると思うんだけど、計画停電中の計画を立てないといけないので調べる時間がない。
こんな感じのログから。
Started GET "/" for 127.0.0.1 at 2012-06-25 23:07:15 +0900 Processing by SamplesController#show as HTML ^[[1m^[[36mProof Load (2.2ms)^[[0m ^[[1mSELECT * FROM "samples" LIMIT 1^[[0m Completed 302 Found in 13ms (ActiveRecord: 2.2ms)
Wikiに貼るとtableに変換してくれる記法で出力。(ダイアリーに貼ってもtableになってしまうので下の例は全角になってる。)
|2012-06-25|285| |2012-06-26|380| |2012-06-27|200|
ただし、画像などへのアクセスも全部集計してるので、assetsはカウントしないとかの対応が必要。そういうのもチョロっと書いてやるといい。
Surviving the World - Lesson 628 - Happiness
そんなことより、停電で回転寿司が止まってしまうことが心配です。
- 出版社/メーカー: 亀田製菓
- メディア: 食品&飲料
- クリック: 25回
- この商品を含むブログ (1件) を見る
クリック: 3回
- 1981 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&sqi=2&ved=0CFoQFjAA&url=http://d.hatena.ne.jp/shunsuk/20100211/1265892007&ei=JaraT-vrL4nOrQedrsCnCQ&usg=AFQjCNGAOfc-p4zNZ1o_qSQXdhbVfyE76w
- 809 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CFYQFjAB&url=http://d.hatena.ne.jp/shunsuk/20110824/1314190913&ei=0_3sT8X-I6TymAXJ7bTgDQ&usg=AFQjCNH4uBfGYRiiVIBsfCzp7j4Gywyl9g
- 546 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CMYEEBYwAg&url=http://d.hatena.ne.jp/shunsuk/20090522/1242997423&ei=6wPgT76fKazNmQWoo4WNDQ&usg=AFQjCNFMDSOB_VE-moLfTffPYDPLc98Aeg
- 337 http://matome.naver.jp/odai/2133482271089849301?page=2
- 321 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&ved=0CFkQFjAA&url=http://d.hatena.ne.jp/shunsuk/20070901/1188651818&ei=Wu_sT7L7JofmmAWjhLjBDQ&usg=AFQjCNFgnr5hE9QA0po-yemBSm-jTh2JDA&sig2=XQcr9tC1GHZZxBvWzkfmEg
- 249 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CLMEEBYwAw&url=http://d.hatena.ne.jp/shunsuk/20090114/1231934320&ei=i_fsT42oDeygmQXgj5HEDQ&usg=AFQjCNEp-3CM4Xoq-eP-Sifg1t-NkJeHug&sig2=BX2SCWuXXG8fCZiuB7SPww
- 200 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CFYQFjAE&url=http://d.hatena.ne.jp/shunsuk/20100305/1267788284&ei=ADDtT-C5KYiYiAeLt82eDQ&usg=AFQjCNHqgumMcZzCXWFHzvVYUzl9wQbamg&sig2=ED7sADpkNFvB6pHnZ7Q-Hg
- 182 http://www.google.co.jp/url?sa=t&rct=j&q=mac 隠しファイル 表示&source=web&cd=1&ved=0CFwQFjAA&url=http://d.hatena.ne.jp/shunsuk/20090714/1247567640&ei=lO7sT-7LBqSkmQW1m4TJDQ&usg=AFQjCN
- 158 http://www.google.co.jp/url?sa=f&rct=j&url=http://d.hatena.ne.jp/shunsuk/20091027/1256643206&q=mono+develop+文字化け&ei=MPHsT-ONHqXhmAW31ojVDQ&usg=AFQjCNGT_5aj9dvL2O3GM9-jmZQNtr2u6g
- 125 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0CGcQFjAF&url=http://d.hatena.ne.jp/shunsuk/20110508/1304865150&ei=YunsT8yCDYzqmAWVyMDRDQ&usg=AFQjCNE-_xUXgsfy0oiAJGtV0vIjtf-DXw&sig2=11JnfbFoueVNicnFKji37w




