Cygwin、Mac、Linux で実行されているかどうかを確認するにはどうすればいいですか? 質問する

Cygwin、Mac、Linux で実行されているかどうかを確認するにはどうすればいいですか? 質問する

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

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

ベストアンサー1

通常、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(コメント内) によると、OSX では 、 Linux ではuname -sが提供されますが、私の Cygwin では が提供されます。ただし、さまざまなバージョンを試してみる必要があるかもしれません。DarwinLinuxCYGWIN_NT-5.1

したがって、bashこのようなチェックを行うコードは次のようになります。

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

ここでは、実際にCygWin (そのシェル)内で実行していることを前提としているので、パスはすでに正しく設定されているはずです。あるコメント投稿者が指摘しているように、スクリプトを渡してプログラムをそれ自体からbash実行することはできますが、その結果、パスが必要なように設定されない可能性があります。bashcmd

これを実行する場合は、事前にパスを変更するか、実行可能ファイルの場所を完全に指定する (例: ) などして、正しい実行可能ファイル (つまり、CygWin の実行可能ファイル) が呼び出されるようにする責任はユーザーにあります/c/cygwin/bin/uname

おすすめ記事