Как проверить при выполнении в Cygwin, Mac или Linux?

У меня есть сценарий оболочки, который используется и на Windows/Cygwin и на Mac и Linux. Этому нужны немного отличающиеся переменные для каждого, присваивает версию.

Как сценарий оболочки/удара может обнаружить, работает ли он в Cygwin на Mac или в Linux?

296
задан bastibe 11 August 2010 в 22:10
поделиться

2 ответа

Обычно 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).

273
ответ дан 23 November 2019 в 01:32
поделиться

http://en.wikipedia.org/wiki/Uname

Вся информация, которая вам когда-либо понадобится. Google - ваш друг.

Используйте uname -s , чтобы запросить имя системы.

  • Mac: Дарвин
  • Cygwin: CYGWIN _...
  • Linux: различные, LINUX для большинства
3
ответ дан 23 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: