How to find out Mac OS X version from Terminal?

155

49

I know how to find Mac OS X version from GUI: Apple Menu (top left) > About This Mac

Is there a Terminal command that will tell me Mac OS X version?

Željko Filipin

Posted 2009-11-25T12:48:57.623

Reputation: 4 067

Answers

216

You have a few options:

sw_vers -productVersion 

system_profiler SPSoftwareDataType

Either will do what you need, and will have an output format that's parseable (if that's what you're after).

delfuego

Posted 2009-11-25T12:48:57.623

Reputation: 2 566

3The first one only gives you the OS version (ie, "10.7.5"). The second one gives you a lot of additional information such as 32/64-bit. – Kent – 2013-05-27T22:52:17.760

1Nice one! I was going made looking for lsb_release or something along those lines. Never would have spotted those scripts. :D – Alastair – 2014-02-08T00:43:04.577

7

The command sw_vers shows the version.

For older Mac OS's you can find useful information in Wikipedia.

EdmundsZ

Posted 2009-11-25T12:48:57.623

Reputation: 89

4

If all you care about is the major version (10.10, 10.9), you can do

MAJOR_MAC_VERSION=$(sw_vers -productVersion | awk -F '.' '{print $1 "." $2}')

I use this in a couple of scripts that have to do different things if run on 10.8.x, 10.9.x and now 10.10.

Joe Block

Posted 2009-11-25T12:48:57.623

Reputation: 151

3Simpler: sw_vers -productVersion | cut -d '.' -f 1,2 – waldyrious – 2016-11-18T12:56:32.957

2

If you're looking to split the macOS version number based on semantic versioning for script logic, here is a small snip of code I use

product_version=$(sw_vers -productVersion)
os_vers=( ${product_version//./ } )
os_vers_major="${os_vers[0]}"
os_vers_minor="${os_vers[1]}"
os_vers_patch="${os_vers[2]}"
os_vers_build=$(sw_vers -buildVersion)

# Sample semver output
echo "${os_vers_major}.${os_vers_minor}.${os_vers_patch}+${os_vers_build}"
# 10.12.6+16G29

You can use these variables in script logic to run different commands based on the version of macOS. This gives slightly more granular control down to the patch or build version.

# Sample bash code
if [[ ${os_vers_minor} -ge 11 ]]; then
    DMG_FORMAT=ULFO
elif [[ ${os_vers_minor} -ge 4 ]]; then
    DMG_FORMAT=UDBZ
else
    DMG_FORMAT=UDZO
fi

n8felton

Posted 2009-11-25T12:48:57.623

Reputation: 243