Как определить ОС из скрипта Bash?

Если вы используете файл jar, вы можете настроить файл манифеста и предоставить некоторую информацию (основной класс и т. д.) в этом файле.

Вы также можете ссылаться на другие файлы jar, которые будут использоваться вашей основной банкой файл. Например. которые вы не хотите включать в ваш файл jar компании.

Кроме того, что другие ребята правы - настройте командный файл / скрипт.

433
задан Ciro Santilli 新疆改造中心996ICU六四事件 4 March 2018 в 17:32
поделиться

7 ответов

uname

или

uname -a

, если Вы хотите больше информации

7
ответ дан Federico A. Ramponi 4 March 2018 в 17:32
поделиться

Для моего .bashrc я использую следующий код:

platform='unknown'
unamestr=`uname`
if [[ "$unamestr" == 'Linux' ]]; then
   platform='linux'
elif [[ "$unamestr" == 'FreeBSD' ]]; then
   platform='freebsd'
fi

Тогда я делаю somethings как:

if [[ $platform == 'linux' ]]; then
   alias ls='ls --color=auto'
elif [[ $platform == 'freebsd' ]]; then
   alias ls='ls -G'
fi

Это ужасно, но это работает. Можно использовать case вместо if, если Вы предпочитаете.

283
ответ дан the Tin Man 4 March 2018 в 17:32
поделиться

В странице справочника удара говорится, что переменный OSTYPE хранит название операционной системы:

OSTYPE Автоматически набор к строке, которая описывает операционную систему, в которой выполняется удар. Значение по умолчанию системно-зависимо.

Это установлено на linux-gnu здесь.

267
ответ дан Johannes Schaub - litb 4 March 2018 в 17:32
поделиться

Попытайтесь использовать "uname". Например, в Linux: "uname-a".

Согласно странице руководства, uname соответствует SVr4 и POSIX, таким образом, это должно быть доступно на Mac  OS  X и Cygwin также, но я не могу подтвердить это.

BTW: $OSTYPE также установлен на linux-gnu здесь:)

9
ответ дан Peter Mortensen 4 March 2018 в 17:32
поделиться

Обнаружение операционная система и тип ЦП не настолько легко сделать портативно . Я имею sh сценарий приблизительно 100 строк, который работает через очень большое разнообразие платформ Unix: любая система я использовал с 1988.

основные элементы

  • uname -p, тип процессора , но обычно unknown на современных платформах Unix.

  • uname -m даст "аппаратное название машины" в некоторых системах Unix.

  • /bin/arch, если это существует, будет обычно давать тип процессора.

  • uname без аргументов назовет операционную систему.

В конечном счете необходимо будет думать о различиях между платформами и , как прекрасный Вы хотите сделать их. , Например, только для хранения вещей простыми я рассматриваю i386 до i686, любой" Pentium*" и любой" AMD*Athlon*" все как [1 110].

Мой ~/.profile выполнения сценарий при запуске, который устанавливает одну переменную на строку, указывающую на комбинацию ЦП и операционной системы. Я имею определенный для платформы bin, man, lib, и include каталоги, которые будят набор на основе этого. Тогда я установил полную лодку переменных среды. Так, например, сценарий оболочки для переформатирования почты может звонить, например, $LIB/mailfmt, который является определенным для платформы исполняемым двоичным файлом.

, Если Вы хотите сократить углы , uname -m и плоскость uname, скажет Вам, что Вы хотите знать на многих платформах. Добавьте другой материал при необходимости в нем. (И используйте case, не вложенный if!)

35
ответ дан Norman Ramsey 4 March 2018 в 17:32
поделиться

В ударе используйте $OSTYPE и $HOSTTYPE, как зарегистрировано; это - то, что я делаю. Если это недостаточно, и если даже uname или uname -a (или другие подходящие варианты) не дает достаточно информации, there’s всегда сценарий config.guess из проекта GNU, сделанного точно с этой целью.

10
ответ дан Teddy 4 March 2018 в 17:32
поделиться

Я записал персональную библиотеку Bash и платформу сценариев, которая использует GNU shtool, чтобы сделать довольно точное обнаружение платформы.

GNU shtool является очень портативным набором сценариев, который содержит, среди других полезных вещей, 'shtool платформа' команда. Вот вывод:

shtool platform -v -F "%sc (%ac) %st (%at) %sp (%ap)"

на нескольких различных машинах:

Mac OS X Leopard: 
    4.4BSD/Mach3.0 (iX86) Apple Darwin 9.6.0 (i386) Apple Mac OS X 10.5.6 (iX86)

Ubuntu Jaunty server:
    LSB (iX86) GNU/Linux 2.9/2.6 (i686) Ubuntu 9.04 (iX86)

Debian Lenny:
    LSB (iX86) GNU/Linux 2.7/2.6 (i686) Debian GNU/Linux 5.0 (iX86)

Это приводит к довольно удовлетворительным результатам, как Вы видите. GNU shtool является немного медленным, таким образом, я на самом деле храню и обновляю идентификацию платформы в файле в системе, которую называют мои сценарии. Это - моя платформа, так, чтобы работы для меня, но Ваш пробег может варьироваться.

Теперь, необходимо будет найти способ упаковать shtool со сценариями, но это не трудное осуществление. Можно всегда возвращаться к выводу uname, также.

Править:

Я пропустил сообщение Teddy о config.guess (так или иначе). Это очень похожие сценарии, но не то же. Я лично использую shtool для другого использования также, и он работал вполне хорошо на меня.

7
ответ дан 22 November 2019 в 22:57
поделиться
Другие вопросы по тегам:

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