🐟

OS情報を判定するfish functionを作った

2020/11/02に公開

全部対応していくとキリがないため、自分が使っているOSのみ対応することにした。

  • Debian
  • Ubuntu
  • Arch Linux
  • Endeavour OS
  • macOS
  • Fedora
  • CentOS

OS情報を判定するには、unameの実行結果や/etc/*releaseを見るのが手っ取り早い。

各OSごとのファイル種類/実行結果

Endeavour OS, macOS 以外 にはDockerイメージがあるのでそれを用いるのが早い。
他は不明。

Ubuntu

uname -s
Linux
/etc/*release
/etc/lsb-release
/etc/os-release -> ../usr/lib/os-release
/etc/*version
/etc/debian_version
/etc/ec2_version

Endeavour OS

uname -s
Linux
/etc/*release
/etc/arch-release
/etc/lsb-release
/etc/os-release -> ../usr/lib/os-release
/etc/*version
Endeavour OSには存在せず。

Arch Linux

uname -s
Linux
/etc/*release
/etc/arch-release
/etc/os-release -> ../usr/lib/os-release
/etc/*version
Archには存在せず。

macOS

uname -s
Darwin
/etc/*release
macOSには存在せず。
/etc/*version
macOSには存在せず。

Debian

uname -s
Linux
/etc/*release
/etc/os-release -> ../usr/lib/os-release
/etc/*version
/etc/debian_version

Fedora

uname -s
Linux
/etc/*release
/etc/fedora-release -> ../usr/lib/fedora-release
/etc/os-release -> ../usr/lib/os-release
/etc/redhat-release -> fedora-release
/etc/system-release -> fedora-release
/etc/*version
Fedoraには存在せず。

CentOS

uname -s
Linux
/etc/*release
/etc/centos-release
/etc/os-release -> ../usr/lib/os-release
/etc/redhat-release -> centos-release
/etc/system-release -> centos-release
/etc/*version
CentOSには存在せず。

処理を考える

Linuxディストリには /etc/os-releaseが含まれているので、まずこれでLinuxかmacOSか判別

if test -e /etc/os-release
    echo "this is linux"
    // 条件分岐...
else
    echo "this is not linux"
end

macOSかそれ以外か判別

if test (uname -s) = "Darwin"
	set dist_name "macOS"
else
	# Other
	echo "unkown distribution"
	set dist_name "unknown"
end

最終的には以下のようになった。

get_os_info.fish

Discussion