Teru Komaki's Blog (Temporary)

.bashrcでOSを確認する

最近、.bashrc.vimrcなど、見直してました。

macOSで利用している.bashrcを、Linuxでも利用したいと思ったからです。

ということで、自分用のメモ。

.bashrc

.bashrcは、シンプルに外部ファイルを読み込むだけにしました。

gitリポジトリは、ghqで管理しているので、こんな感じ。

1. $HOME/go/src/gitlab.com/teruhirokomaki/dotfiles/.bash_bashrc.bash
2. $HOME/go/src/gitlab.com/teruhirokomaki/dotfiles/.bash_alias.bash
3. $HOME/go/src/gitlab.com/teruhirokomaki/dotfiles/.bash_function.bash

.bash_bashrc.bash

ファイルの一部を切り取っています。

こんな感じで記述しました。

 1#--------------------------------------------------
 2# os
 3#--------------------------------------------------
 4if [ "`uname`" == "Darwin" ]; then
 5  ISMAC=true
 6elif [ "`uname`" == "Linux" ]; then
 7  ISLINUX=true
 8fi
 9
10#--------------------------------------------------
11# fzf
12#--------------------------------------------------
13
14if [ $ISLINUX ]; then
15  [ -f ~/.fzf.bash ] && source ~/.fzf.bash
16fi

ファイル名についての模索

ファイル名の規則ってどんな感じなんでしょうかね?

gcpのsdkをインストールした際に.bash_profileに追記されたのが、こちら

path.bash.inccompletion.bash.incというファイル名なんですね。

先程の外部ファイルは.bash_bashrc.bashとしてますがbashrc.bash.incにしても良いかもしれない。

1# The next line updates PATH for the Google Cloud SDK.
2if [ -f '/Users/teruhirokomaki/google-cloud-sdk/path.bash.inc' ]; then source '/Users/teruhirokomaki/google-cloud-sdk/path.bash.inc'; fi
3
4# The next line enables shell command completion for gcloud.
5if [ -f '/Users/teruhirokomaki/google-cloud-sdk/completion.bash.inc' ]; then source '/Users/teruhirokomaki/google-cloud-sdk/completion.bash.inc'; fi

ググってみた

ググってみると…

How to detect the OS from a Bash script?

uname$OSTYPEのパターンがありましたが、macOSの場合の記述がシンプルなので、unameにしました。

uname

1platform='unknown'
2unamestr=`uname`
3if [[ "$unamestr" == 'Linux' ]]; then
4   platform='linux'
5elif [[ "$unamestr" == 'FreeBSD' ]]; then
6   platform='freebsd'
7fi

$OSTYPE

 1if [[ "$OSTYPE" == "linux-gnu" ]]; then
 2        # ...
 3elif [[ "$OSTYPE" == "darwin"* ]]; then
 4        # Mac OSX
 5elif [[ "$OSTYPE" == "cygwin" ]]; then
 6        # POSIX compatibility layer and Linux environment emulation for Windows
 7elif [[ "$OSTYPE" == "msys" ]]; then
 8        # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
 9elif [[ "$OSTYPE" == "win32" ]]; then
10        # I'm not sure this can happen.
11elif [[ "$OSTYPE" == "freebsd"* ]]; then
12        # ...
13else
14        # Unknown.
15fi
1case "$OSTYPE" in
2  solaris*) echo "SOLARIS" ;;
3  darwin*)  echo "OSX" ;;
4  linux*)   echo "LINUX" ;;
5  bsd*)     echo "BSD" ;;
6  msys*)    echo "WINDOWS" ;;
7  *)        echo "unknown: $OSTYPE" ;;
8esac

参考にしました