When it’s ready.

出来るまで出来ない

「人のShell見て、我がShell直せ」 DropBoxに置いたdotFileから簡単安全にリンクを作成するスクリプト

あまりにもお粗末なshスクリプトしか書けなくて愕然としたので、もう少し頑張ってみた。無意味な事ばかりしてる気がしなくもないけど晒してみる。

#!/bin/bash
echo 'dot file link maker'

if test -f fileList.txt;then
  echo 'start!'
else
  ls -a > fileList.txt
  $EDITOR $(pwd)/fileList.txt
fi

fileList=`cat fileList.txt`
y=yes
n=no
echo 以下のファイルのリンクを作成します\n"$fileList"
echo よろしいですか?選択肢をタイプしてください。
select Answer in yes Ctrl+C:中断
do
  break;
done

for i in $fileList
do
  if test -L ~/"$i"; then
    echo ~/"$i""はリンクです、削除します。"
    rm ~/"$i"
  elif test -f ~/"$i"; then
    echo ~/"$i""は、ファイルです。リネームします。"
    mv ~/"$i" ~/"$i".$RANDOM
  fi
  ln -s $(pwd)/"$i" ~/"$i"
done

ls -ltra ~
echo "リンク作成完了しました"

挙動

リンクを作成するリストは、shと同じ階層にあるfileList.txtというファイルに列挙されているファイルに対してリンクを作成します。(今後環境によって、作成するリンクファイルを変えたい時対応のつもり。その際には、置き場所をDropBoxからずらすかホスト名毎のファイルを作るかして対応するつもり。)

スクリプトの初回実行時にfileList.txtが存在しない場合は、どう階層内のdotファイルも含めた全てのファイル名を列挙したファイルが作成されます。

環境変数内の標準のエディターが起動するので、リンクを張りたくないファイルを削除します。編集が終わればエディターを終了させます。

終了するとリンク作成候補の一覧が表示されます。作成していいか聞いてくるので、リストが正しければ、'yes’をタイプするとリンクが作成されます。間違っていれば、ctrl+cで抜けて再度fileList.txtを編集し、shを再実行します。

リンク作成時に、リンク作成先にファイルやリンクがすでにある場合があるので、以下のように対応しています。

すでにリンクがある場合には、特にバックアップしても意味がないと思ったので消してます。
ファイルがあったら、ランダムな文字列をお尻につけてバックアップしてます。
その後リンクを作成してます。

無事にリンクが作成できたら、ls -ltra ~ を表示して終わります。

反省

人のshell見て・・というタイトルだけど、実際は本買いました。

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

  • 作者: ブルースブリン,Bruce Blinn,山下哲典
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2003/02
  • メディア: 単行本
  • 購入: 18人 クリック: 331回
  • この商品を含むブログ (60件) を見る

スクリプトの頭に書く'#!'とか今まで何でだろ?おまじないに書いとけばいっか?みたいに思っていた事も丁寧に説明してあったり、サンプルも多くて助かりました。
Windowsが蔓延る前に、みんなこんな本など、読んで*nixが好きになればいいのにと思う