1. ホーム
  2. バッシュ

[解決済み】Cygwin、Mac、Linuxで動作しているかどうかを確認する方法は?

2022-04-30 07:39:41

質問

Windows/CygwinとMac/Linuxの両方で使用するシェルスクリプトがあります。それぞれのバージョンで若干異なる変数が必要です。

シェル/bash スクリプトが Cygwin で実行されているか、Mac で実行されているか、Linux で実行されているかを検出するにはどうすればよいですか?

どのように解決するのですか?

通常は uname の様々なオプションで、どのような環境で実行されているかがわかります。

pax> uname -a
CYGWIN_NT-5.1 IBM-L3F3936 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin

pax> uname -s
CYGWIN_NT-5.1

そして、とても参考になるのが schot (コメントにて)。 uname -s 与える Darwin はOSXの場合、そして Linux はLinux用、私のCygwinは CYGWIN_NT-5.1 . でも、いろいろなバージョンで実験してみないとわからないかもしれませんね。

そこで bash のようなチェックを行うコードは、次のようなものになります。

unameOut="$(uname -s)"
case "${unameOut}" in
    Linux*)     machine=Linux;;
    Darwin*)    machine=Mac;;
    CYGWIN*)    machine=Cygwin;;
    MINGW*)     machine=MinGw;;
    *)          machine="UNKNOWN:${unameOut}"
esac
echo ${machine}


なお、ここでは、あなたが実際に 内の CygWin ( bash のシェルを使用するため、パスはすでに正しく設定されているはずです。あるコメントで指摘されているように、このシェルで bash から、スクリプトを渡して cmd を使用すると、必要なパスが設定されない可能性があります。

もし、あなたが その場合、正しい実行ファイル(CygWinのもの)が呼び出されるようにするのはあなたの責任です。おそらく、事前にパスを修正するか、実行ファイルの場所を完全に指定します(例:, /c/cygwin/bin/uname ).