-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.sh
executable file
·55 lines (51 loc) · 2.14 KB
/
install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env bash
# https://qiita.com/youcune/items/fcfb4ad3d7c1edf9dc96
set -ue
# 「function」は省略可能
link_to_homedir() {
# commandは、シェルコマンド以外も実行できる。bulitinコマンドはシェルコマンドしか実行できない。
command echo "backup old dotfiles..."
# バックアップ用ディレクトリの作成
local backupdirname=".dotbackup"
if [ ! -d "$HOME/$backupdirname" ];then
# ~と$HOMEは、同じ場所を示すが、""で囲んでも意味を成すのは$HOME
command echo "$HOME/$backupdirname not found. Auto Make it"
command mkdir "$HOME/$backupdirname"
fi
# dirnameは、パスからディレクトリ部分のみを取り出す
# BASH_SOURCE[0]には実行したスクリプトのパスが入っている
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
local dotdir=$script_dir
if [[ "$HOME" != "$dotdir" ]];then
# ?: 任意の一文字にマッチ
# *: 長さ0以上の文字列にマッチ
for f in $dotdir/.??*; do
local filename=$(basename $f)
# -L: ファイルが存在し、シンボリックリンクであれば真
if [[ -L "$HOME/$filename" ]];then
command rm -f "$HOME/$filename"
fi
if [[ -e "$HOME/$filename" ]];then
command mv "$HOME/$filename" "$HOME/$backupdirname"
fi
# -s: ハードリンクではなく、シンボリックリンクを作る
# -n: リンクの作成場所として指定したディレクトリがシンボリックリンクだった場合、参照先にリンクを作るのではなく、シンボリックリンクそのものを置き換える(-fと組み合わせて使用)
# -f: 同じ名前のファイルがあっても強制的に上書き
command ln -snf $f $HOME
done
else
command echo "same install src dest"
fi
}
update_preference() {
if [[ "$SHELL" == "/bin/bash" ]];then
command source "$HOME/.bashrc"
elif [[ "$SHELL" == "/bin/zsh" ]];then
command source "$HOME/.zshrc"
else
command echo "unknown shell"
fi
}
link_to_homedir
update_preference
command echo -e "\e[1;36m Install completed!!!! \e[m"