以前.screenのセッションを便利に利用するaliasを書いたのですが,id:mollifierさんに,教えていただいて,リファクタリングしました.
仕様
- s すると,pwdの最後のディレクトリの名前のscreenをアタッチしようとする(なければ作る)
- s nameすると,指定された名前のscreenをアタッチしようとする(なければ作る)
- 具体的には,~/checkoutでsすると,checkoutという名前のscreenができて,どこかで,s checkoutすると,さっき作ったscreenをアタッチします.
修正前
s () { if [ -n "$1" ]; then name="$1" else name=`ruby -e 'puts Dir.pwd.split("/").last'` fi screen -x $name || screen -r $name || screen -S $name
pwdの最後のディレクトリを取得する方法が分からなかったので,rubyで取得していました.
これはよくない感じです.
修正後
s () { name=${1:-${PWD##*/}} screen -x $name || screen -r $name || screen -S $name }
修正前のものが,以下のように修正されています.
##*/というのが,なんたら/を最長一致で消去する,という処理だそうです.
補足
いま横にいたid:birdie7さんによると,これはBシェル系のみ有効で,Cシェル系では動かないそうです.
気をつけてください.
まとめ
いまの若い人はシェルとかにはあまり興味がなく,しょうもないこともRubyやPerlなどで書いてしまいがちですが,古い技術を学ぶことで身につくこともあるのだということを学びました.
ベンチマークを取ったわけではないのですが.ディレクトリを取るためだけにRubyを使わなくなったのは,ナイスだと思います.
id:mollifierさん,id:birdie7さん,ありがとうございました.