gitなどにあげたdotfilesのシンボリックリンクを貼るスクリプトを書き直しました

なんとなく使いにくい気がしたので1から書き直しました

一応デバッグはしましたが多分まだバグがあるので自己責任で

前の書いた時に書いた記事 symdot.sh (dotfilesのshスクリプト)をver 0.0.3にしました - コンピュータ技術者になるための備忘録
ダウンロードはこちらから

対象のファイルを書くテキスト

http://github.com/silenvx/dotfiles/blob/master/.setsymlist
仕様としては貼ったテキストファイルのコメントを見てもらえればわかるのですが簡単に説明しますと
本体ことsetsym.shは.setsymlistの中身を見て.setsymfunc.shに書かれた関数を呼び出すスクリプトです。これは基本的にいじらなくていい
.setsymlistは一般的な使い方なら

default ".vimrc" "~/"

のようにln -s ".vimrc" "~/"と同じ感じで書いていきます

そんな感じで表的な話で変わったのは
自動的にシンボリックリンクが貼れそうなのを選んで貼る機能を消して*1
firefoxのプロファイルにもシンボリックリンクを貼りやすいようにしたぐらいです*2

裏的な話では
関数を.setsymfunc.shに分けたことにより少しは機能の追加がしやすくなった(?)かもしれないのと
シェルスクリプトの書き方が前よりマシになったと思うので変なバグも減ったと思います
ただ、変数名は適当にしたのであまり書き直したくないな
.setsymfunc.shにインストールやアンインストールの時の機能を追加する書き方はコメントとソースを見てもらえればわかると思うのですが簡単に説明しますと
まず${SYM_FUNCLIST}に機能を識別するための名前とその機能を使うのに必要な引数の数を書きます
ここでは既にある奴にsampleという機能を足すとしましょう

SYM_FUNCLIST="default 2
firefox 2"
sample 0"

こんな感じで書いたら後は

func_install_sample(){
    echo "install sample"
}
func_remove_sample(){
    echo "remove sample"
}

のようにfunc_(install|remove)_(名前)というような関数を書けば機能は追加できました
後は./.setsymlistにsampleと書いておくだけで

% ./setsample.sh -i
install sample

このように出力されます

このスクリプトを書いて、思ったこと、気づいたこと

例外処理を書くのは大変だということ
例えば

if [ -e <シンボリックリンクだけどリンク先が存在しないもの> ]

これがなんでfalseになるのか気づくのに時間がかかった

realpathが便利
シンボリックリンクのリンク先を調べたり -mで存在しないファイルの相対パス絶対パスに変えたり

*1:わざわざスクリプトに埋め込むまでもないと思った

*2:~/.mozzila/firefox/profiles.iniを見に行ってるだけです