Hatena::ブログ(Diary)

わからん

2011.12.11

USP MAGAZINE の志にしびれた

冒頭のページに、この変動の時代をいかに技術者として生きていくべきかを考えるうえでの志が述べられておりました。

  • UNIX 哲学を学び、実践すること(Simple is Beautiful)
  • 自立した技術者による協働を目指すこと(Independent Engineers)。
  • 手しごとと工夫を大切にすること(Craftmanship)
  • 自然であること、Free であること(Open Mind)
  • 本質を見極め、自分の頭で考え行動する技術者たること(Sophisticated Engineers)

[] コマンドを呼び出すときの引数指定が面倒なとき

C言語で何度かみた(lv/lgrep, pkill/pgrep)。引数で処理を振り分ける方式だと、コマンドを打つのが面倒。そんなときは、File::basename($0) をみるというのも手。最近だとこんなのを書いた。

tweet   = Tweet.new

command = File::basename($0)
date    = `date +\"%Y/%m/%d %A %H:%M\"`

if command === "kita"
   message = "#出社 #{date}"
elsif command === "kaeru"
   message = "#退社 #{date}"
else
   warn "kintai-tweet.rb は kita か kaeru という名前でシンボリックリンクを作成してそれを実行するという使い方です。"
   exit 1
end

[] コマンドで引数 "-" に対応させる

oauth gem のサンプル yql.rb より。そういえばこういうの、書いたことなかったです。

option_parser = OptionParser.new do |opts|
...
option_parser.parse!
query = ARGV.pop
query = STDIN.read if query == "-"

[] コマンドで使う while line = gets で先ほど知ったこと

#!/usr/bin/env ruby
# encoding: utf-8

while line = gets
  line.chomp!
  puts line
end

こんなのを雛形にしていくつもその場かぎりの雑な整形スクリプトをつくって仕事をこなしてました。

gets と書けば カーネルメソッド Kernel.gets で、それは STDIN.gets みたいなものなんだろーと思っていたのですが、

Kernel#gets は ARGF.gets 相当だったのですね。

それだと融通がきいて、引数があればそのファイル、なければ標準入力から gets します。

[] unzip したときにそこにファイルをぶちまけないようにする

 問題

beyond.js の zip ファイルを unzip beyond.zip と解凍すると、直下のディレクトリに大量のファイルが作成されてしまいました。この場合は、beyond というディレクトリの下にファイルが作成されるのが、期待していた挙動です。


 対策

雑ですが、とりあえず以下のような ~/bin/unzi を作成してみました。

#!/bin/bash

target_dir=${1%.*}

if unzip -l $1 | grep -q ${target_dir}/ ; then
   unzip $1
else
   mkdir $PWD/$target_dir
   unzip $1 -d $PWD/$target_dir
fi
Google