2013年1月7日

【Mac】bashのすすめ


普段からMacを愛用しているdommyです。

最近、Android開発以外にもいろいろするので、
bashrcの中身を整理していました。
なので、bashの設定をちょこっと晒してみたいと思います。


Dropbox

bashに関係無いDropboxですが、必須です。
まずはMacへインストールさせます。
そして、使うMacのアカウントはすべて共通化させます。

bashrcなどをすべてDropboxとgitで管理するので、
Dropboxをまずインストールします。

インストールしたらディレクトリを作成
$ cd ~/Dropbox
$ mkdir git

gitディレクトリがレポジトリになります。

Git

次にgitをインストールします。
Macって最初っから入ってましたっけ?
入っていたらそのままでOKです。

レポジトリ作成

gitのレポジトリを作ります。

$ cd ~/Dropbox/git
$ mkdir dotfiles.git
$ cd dotfiles.git
$ git init --bare

これでDropboxにリモートのレポジトリが出来ました。

次に、.bashrcを管理するフォルダを作成します。

$ cd ~
$ mkdir dotfiles
$ mv .bashrc ~/dotfiles
$ mv .bash_profile ~/dotfiles
$ mv .vimrc ~/dotfiles
$ mv .gitconfig ~/dotfiles
$ cd ~/dotfiles
$ git init
$ git add .
$ git commit -m 'first commit'
$ git remote add dropbox ~/Dropbox/git/dotfiles.git
$ git push -u dropbox master

.bashrcとか無い人は作成しちゃってください。
今まで使ってたのをdotfilesへコピーしたら一旦コミットします。

同期スクリプト

dotfiles内に同期用シェルスクリプトを作成します。

$ cd ~/dotfiles
$ touch sync.sh
$ chmod 777 sync.sh
$ vi sync.sh

スクリプトの中身はこんな感じです。

#!/bin/sh
cd $(dirname $0)
for dotfile in .?*
do
    if [ $dotfile != '..' ] && [ $dotfile != '.git' ]
    then
        ln -Fis "$PWD/$dotfile" $HOME
    fi
done

ホームディレクトリに.bashrcなどのシンボリックリンクを作成します。
一旦、実行は後回し。

bashの設定

基本的に中身は外出しします。
なので、読み込み部分だけを書き足して行きます。
すでに、.bashrcがある人はalias.shやexport.shなどに分割し、
中身をこんな感じで読み込むようにすると管理が楽です。

source ~/dotfiles/alias.sh
source ~/dotfiles/export.sh
source ~/dotfiles/prompt.sh
source ~/dotfiles/function.sh
source ~/dotfiles/git-completion.bash
source ~/dotfiles/git-prompt.sh

export HISTSIZE=1000
export HISTIGNORE='fg*:bg*:history*:cd*:ls*:pwd*'

と、それぞれ分けて書いてます。
git-completion.bashとgit-prompt.shはGitHub.comにあります。
git-completion.bash
git-prompt.sh

それぞれ、タブで補完してくれるのと、PS1への表示を助けてくれます。

alias.sh

使っているaliasの一部を紹介

# Navigation
alias ..='cd ..'
alias .2='cd ../../'                                                                                                                                                                                                                  
alias .3='cd ../../../'
alias .4='cd ../../../../'
alias .5='cd ../../../../../'
alias ~='cd ~'
alias ll='ls -Glahs'
alias ls='ls -G'
alias sl='ls -G'
alias path='echo $PATH'

# Search
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias regrep='find . -name "*" -type f | xargs egrep --color=auto'

# Process
alias psgrep='ps aux | egrep -v egrep | egrep'
alias top='top -o cpu'

# Network
alias hosts='sudo vim /etc/hosts'
alias localip='ipconfig getifaddr en0'
alias ips='ifconfig -a | perl -nle"/(\d+\.\d+\.\d+\.\d+)/ && print $1"'

# Disk
alias df='df -h'
alias du='du -h'
alias cleanup='find . -name "*.DS_Store" -type f -ls -delete'
alias cleansvn='find . -name .svn -print0 | xargs -0 rm -r'

# Applications
alias chrome='open -a "Google Chrome"'
alias mail='open -a "Mail"'

regrepとpsgrepはそこそこ使いやすいですね。
あとは、chromeとかmailはタブ切り替えが面倒なので、
bashからすぐ呼び出せるようにaliasに設定しました。

自宅のみで使いたいaliasがあるなどの場合は
if [[ `hostname -s` -eq 'home' ]]; then
    alias svi='sudo vi'
fi
などと、if文でまとめておきます。

prompt


次は使っているbashのプロンプトです。
bashは右側にうまいこと表示が出来ないので、
2行プロンプトを使っています。

PS1='\[\033[32m\][\[\033[0m\] \h: \[\033[36m\]\w\[\033[0m\]$(__git_ps1 "(%s)") \[\033[32m\]]\n\[\033[33m\]\u \[\033[32m\]\$ \[\033[0m\] '

1行名が、
白でホスト名
水色でディレクトリ名
gitの管理下にあれば白でgitのブランチ名

2行目が黄色でユーザ名
です。

別の端末で同期

設定し終わったら、全部コミットしておきます。
どうせバージョン管理されてるので、戻せると思ってコミットコミット。

で、例えば家で設定し終わったら、
会社でいきなり使えるようにしましょう。

まず。Dropboxをインストールして、ファイルの同期
そしてcloneからのsync.sh
$ cd ~
$ git clone ~/Dropbox/git/dotfiles.git
$ cd dotfiles
$ ./sync.sh

これだけで設定終了です。

2台目以降がすごい楽になりました。

こんな感じで新しい環境での開発環境を整えております。