70 votes

Comment puis-je installer les outils de ligne de commande entièrement à partir de la ligne de commande ?

Je voudrais script l'installation des outils de ligne de commande Xcode.

Sur les Mavericks,

xcode-select --install

ouvrira une boîte de dialogue invitant l'utilisateur à procéder à l'installation, mais j'aimerais déclencher l'installation sans boîte de dialogue, comme en utilisant la commande softwareupdate commandement.

Y a-t-il un moyen de le faire ?

Edit :

Plus précisément, xcode-select --install lance une application qui télécharge et installe les outils sans que l'utilisateur ait à les télécharger manuellement ou à posséder un compte Apple Developer. Il semble utiliser /System/Library/CoreServices/Install Command Line Developer Tools.app pour le faire.

Je voudrais utiliser le même mécanisme que celui d'Apple, mais sans l'interface graphique. Je ne veux pas avoir à télécharger manuellement le fichier .dmg contenant les outils, car cela me semble fragile. Apple fournit plusieurs autres outils en ligne de commande, comme softwareupdate y install qui téléchargent ou installent des logiciels directement depuis Apple, et je cherche à trouver la même chose pour ce type de distribution.

49voto

keen Points 634

J'aimerais pouvoir m'attribuer le mérite de celui-ci, mais je l'ai trouvé enterré dans https://github.com/chcokr/osx-init/blob/master/install.sh

Cela a fonctionné sur ma VM sans tête 10.10 sans interface utilisateur connectée. Mises à jour appliquées pour la compatibilité avec au moins 10.9-10.14

touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress;
PROD=$(softwareupdate -l |
  grep "\*.*Command Line" |
  head -n 1 | awk -F"*" '{print $2}' |
  sed -e 's/^ *//' |
  tr -d '\n')
softwareupdate -i "$PROD" --verbose
rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress

Cela suppose que vous n'avez qu'un seul résultat à softwareupdate -l | grep "\*.*Command Line" - si cette méthode renvoie plusieurs versions, vous aurez peut-être besoin d'une logique plus spécifique. (Je n'ai pas de cas de reproduction)

une variante qui semble fonctionner (test limité) sur 10.10-10.14 (10.9 ne renvoie pas de numéro de version osx dans le nom des outils cli donc cela ne fonctionne pas ici) :

PROD=$(softwareupdate -l |
 grep "\*.*Command Line.*$(sw_vers -productVersion|awk -F. '{print $1"."$2}')" |
 head -n 1 | awk -F"*" '{print $2}' |
 sed -e 's/^ *//' |
 tr -d '\n')

quelques exemples de résultats :

* Command Line Tools (OS X Mavericks)-6.2
* Command Line Tools (OS X 10.10) for Xcode-7.2
* Command Line Tools (macOS El Capitan version 10.11) for Xcode-8.2
* Command Line Tools (macOS High Sierra version 10.13) for Xcode-10.1
* Command Line Tools (macOS Mojave version 10.14) for Xcode-10.1

21voto

grg Points 181593
  1. Téléchargez le paquet Command Line Tools à partir du site Site des développeurs d'Apple .

  2. Monter le fichier téléchargé 1 DMG :

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
  3. Exécutez le programme d'installation via la ligne de commande :

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
  4. Une fois terminé, démontez le DMG et supprimez le téléchargement.

    1. Éjecter le DMG 2 .

      cd /
      hdiutil detach /dev/disk3s2
    2. Supprimez la DMG.

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"

1 Au moment où nous écrivons ces lignes, le DMG téléchargé et le nom du paquet sont exacts, mais le nom peut changer à l'avenir. N'oubliez pas de modifier la commande (ou d'utiliser la complétion par tabulation) pour remplir la partie pertinente de la commande.
2 Si la commande ne fonctionne pas, vérifiez que le disque correspond au nom du montage (comme indiqué dans la section mount ).

12voto

BaseZen Points 211

Une tentative de nettoyer le style et la logique de la réponse acceptée, en la rendant aussi indépendante de la version que possible, à l'aide de softwareupdate à sa pleine capacité et l'introduction d'une os variable :

#!/bin/bash
# Requires root
os=$(sw_vers -productVersion | awk -F. '{print $1 "." $2}')
if softwareupdate --history | grep --silent "Command Line Tools.*${os}"; then
    echo 'Command-line tools already installed.' 
else
    echo 'Installing Command-line tools...'
    in_progress=/tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
    touch ${in_progress}
    product=$(softwareupdate --list | awk "/\* Command Line.*${os}/ { sub(/^   \* /, \"\"); print }")
    softwareupdate --verbose --install "${product}" || echo 'Installation failed.' 1>&2 && rm ${in_progress} && exit 1
    rm ${in_progress}
    echo 'Installation succeeded.'
fi

7voto

brysgo Points 171

Une alternative est d'utiliser cet applescript que j'ai écrit :

https://gist.github.com/brysgo/9007731

do shell script "xcode-select --install"
do shell script "sleep 1"

tell application "System Events"
    tell process "Install Command Line Developer Tools"
        keystroke return
        click button "Agree" of window "License Agreement"
    end tell
end tell

xcode-select --install
sleep 1
osascript <<EOD
  tell application "System Events"
    tell process "Install Command Line Developer Tools"
      keystroke return
      click button "Agree" of window "License Agreement"
    end tell
  end tell
EOD

6voto

Nathan F. Points 199

J'ai découvert que si vous installez Home Brew, il installera automatiquement les outils de ligne de commande.

Je l'ai testé en utilisant cette image vagabonde .

Exécutez la commande suivante pour installer Homebrew et, ce faisant, installez les outils de ligne de commande.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Je sais que la question originale ne demandait que comment installer les outils de ligne de commande, mais je ne connais aucun mac de nos jours qui n'a pas aussi Home Brew installé sur lui.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X