2006-08-27 (Sunday) [長年日記]
■ 環境変数を切り替えるシェル関数 # 未完成
selectを使って環境変数を切り替えます. selectを使うとユーザに項目を選択させるスクリプトが簡単に書けます.
例ではCVSROOTを切り替えるものを作ってみました.
function set.cvsroot { PS3='select CVSROOT from above:' ROOTS=( ':pserver:anonymous@tdiary.cvs.sourceforge.net:/cvsroot/tdiary' ':ext:takano32@no32.tk:/path/to/cvs/repository' ':pserver:takano32@no32.tk:/path/to/cvsrepos' ); select ROOT in ${ROOTS[*]}; do export CVSROOT=${ROOT} break done }
ほんとうはシェルスクリプトにしようと思ったのだけれど, 子プロセスで親プロセスの環境変数を変更できないので, シェル関数として書きました.
さらに抽象化し,EDITOR, PAGER, LANGなどの切り替えにも使おうと, 以下のようなコードにしてみたのだけれど,思い通りにはなりませんでした.
function set.env { ENV_NAME=shift 1 ENV_VALUES=$@ PS3="select ${ENV_NAME} from above:" select ENV_VALUE in ${ENV_VALUES[*]}; do eval ${ENV_NAME}='$'${ENV_VALUE} break done } function set.cvsroot { ROOTS=( ':pserver:anonymous@tdiary.cvs.sourceforge.net:/cvsroot/tdiary' ':ext:takano32@no32.tk:/path/to/cvs/repository' ':pserver:takano32@no32.tk:/path/to/cvsrepos' ); set.env "CVSROOT" "${ROOTS[*]}" }
配列の変数ってそのまま渡すことってできないんだっけ...?
[ツッコミを入れる]
[]
本日のPingbacks(全0件)








