startコマンドぽいもの
拡張子を見て、設定したコマンドを起動するスクリプトを作ってみた。Windowsでダブルクリックする感じ。というかこんなの絶対誰かやってるよなー。車輪の再発明だな、きっと。
こんな感じで環境変数を設定して、
STARTS="txt=less:c=gcc -ggdb -Wall" STARTS="${STARTS}:tgz=tar zxvf:tar.gz=tar zxvf" STARTS="${STARTS}:tbz=tar yxvf:tar.bz2=tar yxvf" STARTS="${STARTS}:zip=unzip:lha=lha x" STARTS="$STARTS:gif=xli:jpeg=xli" export STARTS export START_DEFAULT='less'
以下の内容のファイルを作成する(ここでは、sというファイル名にする)。
#!/usr/bin/env ruby # -*- ruby -*- # $Id: s,v 1.6 2005/03/26 11:12:22 s-tanaka Exp $ def shell(*cmds) $stderr.puts '=> ' + cmds.join(' ') # exec shell(and load ~/.profile) # ONLY support POSIX shell. ENV['ENV'] = ENV['HOME'] + '/.profile' exec(ENV['SHELL'], '-i', '-c', cmds.join(' ')) end def exec_cmd(args) cmd = nil if args.size > 0 @ext2cmd.each do |ext, realcmd| if args[0] =~ Regexp.new('\.' + ext + '$', Regexp::IGNORECASE) cmd = realcmd break end end end cmd = @defualt_cmd unless cmd shell(cmd, *args) end # main @defualt_cmd = ENV['START_DEFAULT'] @defualt_cmd = 'ls -l' unless @defualt_cmd @ext2cmd = {} starts = ENV['STARTS'] starts = 'txt=less' unless starts starts.split(/:/).each do |elem| next if elem !~ /=/ @ext2cmd[$`] = $' end exec_cmd(ARGV) # end
(2005/03/26 バグフィックス(^^;;)
んで、次のように使う。
$ s foo.tar.gz # tar zxvf foo.tar.gzを実行。 $ s foo.txt # デフォルトのlessが起動。
このスクリプトのポイントは、
ことかな。
おおそうだ。このプログラムのライセンスは修正BSDライセンスです。