У меня есть сценарий оболочки, который используется и на Windows/Cygwin и на Mac и Linux. Этому нужны немного отличающиеся переменные для каждого, присваивает версию.
Как сценарий оболочки/удара может обнаружить, работает ли он в 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
).
http://en.wikipedia.org/wiki/Uname
Вся информация, которая вам когда-либо понадобится. Google - ваш друг.
Используйте uname -s
, чтобы запросить имя системы.
Дарвин
CYGWIN _...
LINUX
для большинства