명령줄에서 OSX 코드명 가져오기

명령줄에서 OSX 코드명 가져오기

명령줄에서 OSX 코드명(예: Yosemite, El Capitan 등)을 가져올 수 있는 방법이 있나요? 그래요아니요버전 정보를 찾아보세요(예:

sw_vers -productVersion

) 10.10 등을 제공합니다. 감사합니다!

답변1

더 간단하고 더 안정적인 방법이 있어야 한다고 확신하지만 최소한 with (일치만 인쇄) 및 (확장 정규식)을 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'

그러나 이는 SOFTWARE LICENSE AGREEMENT FOR OS X출력의 일부도 반환합니다. 코드명만 원할 경우 sed로 파이프할 수 있지만 -EBSD의 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 프로세스에 연결하지 않고 이 작업을 수행할 수 있는 방법이 있다고 확신하지만 저는 전문가가 아닙니다.)

답변2

이건 어때:

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

답변3

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 시스템에서는 작동합니다(그래서 Yosemite에서 가정합니다). 예 EL CAPITAN를 들어 마케팅 이름은 모두 대문자로 반환됩니다 MAVERICKS.

답변4

OS X 버전 전체에서 이 정보를 검색하는 일관된 방법을 찾으려고 노력 중입니다. Apple 이전 위치: OSXSoftwareLicense.rtfHigh 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 버전 및 기타 버전에서.

관련 정보