Получить кодовое имя OSX из командной строки

Ищите/lib64 каталог, если это там, и не пустеют, у Вас, вероятно, была установка на 64 бита, если это не затем, это были 32 бита.

7
05.10.2015, 22:30
4 ответа

Я уверен, что должен быть более простой и надежный способ, но, по крайней мере, вы можете полностью избавиться от трубы в sed, используя grep с -o (печатает только совпадения) и -E (расширенные регулярные выражения):

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf'

Это, однако, также возвращает СОГЛАШЕНИЕ О ПРОГРАММНОЙ ЛИЦЕНЗИИ ДЛЯ OS X часть вывода. Если вам нужно только кодовое имя, вы можете передать его в sed, но это не потребует никаких обратных ссылок с использованием страшного флага -E, которым так печально известен BSD sed:

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | sed "s/SOFT.*OS X //"

Лично я предпочитаю метод awk:

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}'

Чистое решение awk:

awk '/SOFTWARE LICENSE AGREEMENT FOR OS X/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}'

(Я уверен, что есть способ сделать это без использования дополнительных процессов awk, но я не профессионал. )

5
27.01.2020, 20:17

FWIW, вот хитрый способ; он, вероятно, не является ни очень передовым, ни обратным:

grep "SOFTWARE LICENSE AGREEMENT FOR OS X" \
  "/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf" \
  | sed -E 's/^SOFTWARE LICENSE AGREEMENT FOR OS X (.+)\\$/\1/'

Он работает, по крайней мере, в системах El Capitan и Mavericks, которые я проверил (и поэтому я предполагаю, что в Йосемити). Возвращает маркетинговое название заглавными буквами; например, EL CAPITAN и MAVERICKS .

1
27.01.2020, 20:17

Борьба за единый способ получения этой информации в разных версиях OS X. Apple переместила местоположение:OSXSoftwareLicense.rtfв High Sierra. Вместо того, чтобы использовать регулярные выражения для поражения цели, которая может двигаться, я разработал следующее:

#!/bin/bash
# Retrieve Apple's marketing name for installed operating system 

# Take the number extracted from here; use it as a reference

osx_num=$(sw_vers -productVersion| awk -F '[.]' '{print $2}')

# Lookup table for OS X marketing names 

OSX_MARKETING=(
["10"]="Yosemite"
["11"]="El Capitan"
["12"]="Sierra"
["13"]="High Sierra"
)

# Check if the number extracted is in array; 
# if it is, print marketing name

osx_name () {
  if [[ -n "${OSX_MARKETING[$osx_num]}" ]]; then 
    printf "%s\\n" "${OSX_MARKETING[$osx_num]}"
fi
}

Это работает надежно на четырех самых -последних версиях OS X и, возможно, на других.

0
27.01.2020, 20:17

Как насчет этого:

$ sed -nE '/SOFTWARE LICENSE AGREEMENT FOR/s/([A-Za-z]+ ){5}|\\$//gp' /System/Library/CoreServices/Setup\ Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf
2
27.01.2020, 20:17

Теги

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