MacOS – Best way to check in bash if Command Line Tools are installed

bashmacosterminalxcode

Using bash, I want to check if Command Line Tools are installed.

Currently they are and when I type xcode-select --install I get:

xcode-select: error: command line tools are already installed, use
"Software Update" to install updates It appears Homebrew is already
installed. If your intent is to reinstall you should do… blah blah
blah

Basically my problem is that I have several methods to check in bash (using if / fi) but I don't know which solution is the best one.

1) I can do xcode-select -p and that returns the path /Library/Developer/CommandLineTools but then how I should build the if statement? I don't know what will be presented when CLT are not installed.

2) I can do xcode-select --version. Should I then grep for a phrase version since I get

xcode-select version 2343.

3) I can do which xcode-select but again, in all cases I'm not sure how the if should look like. I also think that grep is not the best way, since in the future the output may be different in future version of OSX.

To sum up I would like something like

#!/bin/bash
if [ no idea ]; then
    #installed, nothing to do...
else
    xcode-select --install
fi

Thanks for any suggestions.

Best Answer

if type xcode-select >&- && xpath=$( xcode-select --print-path ) &&
   test -d "${xpath}" && test -x "${xpath}" ; then
   #... is correctly installed
else
   #... isn't correctly installed
fi

Strangely, the --print-path isn't documented in old Xcode versions but is working as -print-path. On the other hand, the -p option doesn't have this compatibility.