最近、Linux の dotfile を Github で管理しているのですが、
ディストリビューションごとに設定を変えるのが面倒ですので、自動判定方法を調査しました。
dotfile や vim 用の設定方法は、また別の記事で書こうかと思います。
Linuxのディストリビューションを判定する
基本的には /etc/[ディストリビューション名]-release というファイルがそれぞれ存在しているはずなので、ファイルの存在チェックをすればよいみたいです
Fedora release 20 (Heisenbug)
Arch Linux以外はおそらく大丈夫かと思われます。
DebianとかUbuntuの区切りがアンダーバーだったりしますのでちょっと注意。
あと Ubuntu は /etc/lsb-releaseというファイルでさらに判別が必要
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
参考:
[Linux]インストールした Linux ディストリビューション名とバージョンを確認するには
OSのbitの判定
OSが32bitか64bitかはunameで取得できます
uname -m
結果は以下になります
# 32bit 
i686
# 64bit
x86_64
参考:
Linuxが32ビット版か64ビット版かの確認Add Star
作成した shell script
一応汎用的に使えるように、scriptも作成しました
いっぱい列挙してありますが、fedoraとubuntuしか動作確認してません。
# !/bin/bash
# Copyright (c) 2016 Kohei Arao
# https://github.com/koara-local/dotfiles/edit/master/bin/get_os_info
# Released under the Unlicense
# http://unlicense.org/
# Get OS bit
# 32bit : i686
# 64bit : x86_64
get_os_bit() {
    echo $(uname -m);
}
# Get Linux distribution name
get_os_distribution() {
    if   [ -e /etc/debian_version ] ||
         [ -e /etc/debian_release ]; then
        # Check Ubuntu or Debian
        if [ -e /etc/lsb-release ]; then
            # Ubuntu
            distri_name="ubuntu"
        else
            # Debian
            distri_name="debian"
        fi
    elif [ -e /etc/fedora-release ]; then
        # Fedra
        distri_name="fedora"
    elif [ -e /etc/redhat-release ]; then
        if [ -e /etc/oracle-release ]; then
            # Oracle Linux
            distri_name="oracle"
        else
            # Red Hat Enterprise Linux
            distri_name="redhat"
        fi
    elif [ -e /etc/arch-release ]; then
        # Arch Linux
        distri_name="arch"
    elif [ -e /etc/turbolinux-release ]; then
        # Turbolinux
        distri_name="turbol"
    elif [ -e /etc/SuSE-release ]; then
        # SuSE Linux
        distri_name="suse"
    elif [ -e /etc/mandriva-release ]; then
        # Mandriva Linux
        distri_name="mandriva"
    elif [ -e /etc/vine-release ]; then
        # Vine Linux
        distri_name="vine"
    elif [ -e /etc/gentoo-release ]; then
        # Gentoo Linux
        distri_name="gentoo"
    else
        # Other
        distri_name="unkown"
    fi
    echo ${distri_name}
}
# Get distribution and bit
get_os_info() {
   echo $(get_os_distribution) $(get_os_bit)
}
get_os_info
# !/bin/bash -eu
declare -a info=($(./bin/get_os_info))
case ${info[0]} in
ubuntu)
    echo "ubuntu"
    if [[ ${info[1]} == "x86_64" ]]; then
        echo x86_64
    fi
    ;;
*)
    echo "unsupported"
    ;;
esac
参考:
Linuxのディストリビューションとバージョンの確認方法をまとめてみた
シェルスクリプト Tips
bash 配列まとめ - Qiita
