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 では が提供されます。ただし、さまざまなバージョンを試してみる必要があるかもしれません。Darwin
Linux
CYGWIN_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
実行することはできますが、その結果、パスが必要なように設定されない可能性があります。bash
cmd
これを実行する場合は、事前にパスを変更するか、実行可能ファイルの場所を完全に指定する (例: ) などして、正しい実行可能ファイル (つまり、CygWin の実行可能ファイル) が呼び出されるようにする責任はユーザーにあります/c/cygwin/bin/uname
。