2006-08-06 (Sunday) [長年日記]
■ プログラムを起動するときに引数をいじるコマンド
元ネタはCgywinをコマンドランチャー代わりにです.
コマンドの起動時に引数をcygpathで処理し, cygwinからでもWindowsアプリケーションに正常なファイル名を渡す方法です.
コマンドごとにファイルを作る方法だとそのたびに内容のコピーが発生して気持ち悪い.そこで,ひとつのファイルにまとめる方法を考えてみました.
まずは,以下のようなコードを ~/bin/cygexec.sh などとして保存します.
#!/bin/sh PROG_1='firefox /cygdrive/c/Program Files/Mozilla Firefox/firefox.exe' PROG_2='xyzzy /cygdrive/d/Tools/xyzzy/xyzzy.exe' NUM=1 while :; do eval PROG_NUM=PROG_${NUM} eval PROG='$'${PROG_NUM} if [ -z "${PROG}" ]; then break else PROG_PATH=${PROG#`basename $0` } if [ "$PROG_PATH" != "$PROG" ]; then break fi fi NUM=$((${NUM}+1)) done if [ ! -z "${PROG}" ]; then if [ $# -eq 1 ]; then exec "${PROG_PATH}" "$(cygpath -wa "$1")" else exec "${PROG_PATH}" fi fi
んで, "ln -s ~/bin/cygexec.sh ~/bin/firefox" といったようにリンクを張れば準備完了. firefoxコマンドの第一引数を cygpath で処理してくれるはずです.
他のプログラムを追加したい場合は例中の xyzzy のように PROG_N の追加とシンボリックリンクの追加を行えばよし.
この件では起動時に引数をcygpathで処理していますが, 最後のif文の周辺でいろいろいじれば他の処理にも使えるはず.
そーいや,
LinuxサーバHacks―プロが使うテクニック&ツール100選(ロブ フリッケンガー/Rob Flickenger/山口 晴広/イメージズアンドワーズ) でホスト名と同名のコマンドを作り,いきなりsshする方法を扱っていて,そのときに同じような構造のコマンドを作っていたような気がする.
うーむ.それにしてもいまだにシェルスクリプトはしっくりこない. 書けるっちゃあ書けるんだが,イマイチよくわからない挙動を示す部分があったり,忘れている部分が多く,書き応えがあるんだよな. こっちはそんな無駄な充実感を求めてないよ...
[]
本日のPingbacks(全0件)









そういえば学生の頃,ログイン時にNIS(懐しい…)からホスト名一覧を拾ってきて<br>alias ホスト名='rsh ホスト名'<br>みたいなのを自動的に設定するというのを.profileだかに書いていましたよ.
うは,YPとはまた懐かしいですね.(実は身の回りにまだ使っているところがあったりしますけども(ぉ<br>うーん,そういえば,今は同じようなことができる仕組みって普通の環境では動いてなさそうですね.ホスト名の一覧を取得できるのは便利ですが,ネットワークの地図を共有する仕組みであるということを考えると,今となっては牧歌的なのかも...?