Як повністю встановити інструменти командного рядка з командного рядка?

Я хотів би сценарій встановлення інструментів командного рядка Xcode.

На Mavericks,

xcode-select --install

відкриється діалогове вікно з запитом користувача про встановлення, але я б хотів ініціювати встановлення без діалогового вікна, наприклад, за допомогою команди softwareupdate .

Чи є спосіб зробити це?

Редагувати:

Зокрема, xcode-select --install запускає програму, яка завантажує та встановлює інструменти, не вимагаючи вручну завантажити їх або мати обліковий запис розробника Apple. Для цього використовуються /System/Library/CoreServices/Install Command Line Developer Tools.app .

Я хотів би використовувати той самий механізм, що і Apple, але без графічного інтерфейсу. Я не хочу вручну завантажувати .dmg, що містить інструменти, оскільки це здається крихким. Apple надає кілька інших інструментів командного рядка, таких як softwareupdate і install , які завантажують або встановлюють програмне забезпечення безпосередньо від Apple, і я шукаю те ж саме для цього типу розподілу .

32
Ви намагаєтеся це зробити для внутрішнього сценарію або для якогось розподілу? Причина, чому я запитую, полягає в тому, що інструменти розробника вимагають (вільного) облікового запису розробника для доступу та розповсюдження їх поза межами, що порушує ліцензійну угоду Apple.
додано Автор timothymcgrath, джерело
@ColinC. xcode-select --install не вимагає облікового запису розробника Apple. Вона може вимагати прийняття ліцензійної угоди перед використанням інструментів, але вона завантажує їх без облікового запису.
додано Автор therefromhere, джерело

7 Відповіді

Wish I could claim credit for this one, but I found it buried in https://github.com/chcokr/osx-init/blob/master/install.sh

Це працювало на моєму 10.10 без голови VM без входу в інтерфейс користувача.

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;
24
додано
Чудова відповідь, працює для мене на Сьєррі! :-) Проте, після запуску програми softwareupdate -i ... можна буде rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progr‌ код>, інакше наступні виклики softwareupdate -l відображають Інструменти командного рядка ... як доступне оновлення. Це (припущення) оновлення, здається, не відображається в App Store, можливо тому, що softwareupdate -l містить лише "оновлення системи", а не оновлення програм.
додано Автор Mirco A. Mannucci, джерело
Цей сценарій є оригінальним джерелом коду та має додатковий код, який буде працювати на версіях Mac OS X нижче 10.9: github.com/timsutton/osx-vm-templates/blob/…
додано Автор BeyondProgrammer, джерело
Цей метод не працює правильно на 10.12 Sierra; здається, що торкнувся файл позначено для встановлення старої версії інструментів, які softwareupdate ніколи не розпізнає, як встановлено
додано Автор Hieu Pham, джерело
На жаль, це досить типово для цього типу речей, які будуть розбиті на кожен новий реліз, так що ніякого реального сюрпризу .....
додано Автор keen, джерело
thanks - оновив код у відповіді, оскільки це повинно бути зворотним портативним.
додано Автор keen, джерело
Для 10.12 (Sierra), все, що мені довелося змінити, було для "-v", щоб стати "--verbose"
додано Автор macetw, джерело
На High Sierra це встановлює El Capitan, оскільки head -n 1 припускає, що перший результат є правильним, але це останній правильний ... Чи є спосіб завжди отримати найвищу версію ?
додано Автор thaimin, джерело
  1. Download the Command Line Tools package from the Apple Developer site.

  2. Mount the downloaded1 DMG:

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
    
  3. Run the installer via the command line:

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
    
  4. When finished, unmount the DMG and delete the download.

    1. Eject the DMG2.

      cd /
      hdiutil detach /dev/disk3s2
      
    2. Delete the DMG.

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
      

1 At the time of writing, the downloaded DMG and package name is accurate, however in the future, the name may change. Remember to alter the command (or use tab-completion) to fill in the relevant portion of the command.
2 If the command does not work, check the disk matches the name of the mount (as per mount).

18
додано
Я хотів би, щоб це було доказом майбутнього, і я не хочу надавати власну копію образу диска інструментів. xcode-select --install завантажує та встановлює інструменти для користувача, і це не вимагає ADC. Я хочу зробити саме це, але без графічного інтерфейсу.
додано Автор therefromhere, джерело
Знайдені пункти 1 і 2 дуже корисні для встановлення Hardware IO Tools.
додано Автор PhilipD, джерело

Альтернативою є використання цього яблучного сценарію:

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 <
5
додано
macos 10.11 Я отримую повідомлення про помилку "не дозволено на JavaScript для допоміжного доступу"
додано Автор user48780, джерело

Це те, що я використовую, частково на основі відповіді brysgo.

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db \
  "INSERT or REPLACE INTO access
   VALUES('kTCCServiceAccessibility','com.apple.Terminal',0,1,1,NULL,NULL);"

if [[ "$(xcode-select -p)" == "" ]]; then
  printf "\n### Installing Xcode command line tools\n"
  xcode-select --install
  sleep 2
  osascript <
2
додано

Спроба очистити стиль і логіку прийнятої відповіді, зробивши її максимально незалежною від версії, використовуючи softwareupdate на повну потужність і ввівши повторно використовувану змінну os :

#!/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
2
додано

У цих відповідях можна знайти кілька альтернатив:

Завантажте інструменти командного рядка XCode

Ви можете завантажити пакунки XCode 4.x CLTools зі свого офіційного сайту для завантаження через прямі посилання.

Here is a script that will automate the install process for you 1.

Щоб знайти оновлені посилання для інструментів, можна скористатися цією командою:

curl -Ls https://devimages.apple.com.edgekey.net/downloads/xcode/simulators/index-3905972D-B609-49CE-8D06-51ADC78E07BC.dvtdownloadableindex | plutil -convert json -o - - | python -mjson.tool | less

[1] Будь ласка, не зловживайте/перевантажуйте свої сервери

Ви можете виявити, що вперше ввійти до сайту для розробників Apple завантажити найновіші доступні інструменти командного рядка. Потім ви можете розмістити .dmg на своєму власному сервері репо і мати змогу надійно встановити .dmg на багатьох машинах з hdiutil без наявності для входу на developer.apple.com.

Починаючи з 06.10.2015, посилання на останні інструменти командного рядка dmg :

http://adcdownload.apple.com/Developer_Tools/Command_Line_Tools_OS_X_10.10_for_Xcode_6.3.2/commandlinetoolsosx10.10forxcode6.3.2.dmg

1
додано
Хоча це посилання може відповісти на це питання, краще тут включити основні частини відповіді та надати посилання для посилання. Відповіді лише на посилання можуть стати недійсними, якщо змінена сторінка.
додано Автор Pacerier, джерело
@grgarside: Потрібно деякий час для оновлення цього сценарію за допомогою останнього Yosemite/XCode 6.3. 2 CLT dmg , і скопіювали основні частини відповіді локально до цієї відповіді.
додано Автор TrinitronX, джерело
@grgarside: Я зрозумів, що питання, що пов'язує, і що сценарій, ймовірно, застарів, але не встиг оновити його в той же день, коли я спочатку опублікував. Я просто хотів надати цим посиланням гарне місце для початку і як записку до себе, щоб знову повернутися і оновити і перевірити речі.
додано Автор TrinitronX, джерело

Я виявив, що якщо ви встановите Home Brew, він автоматично встановить інструменти командного рядка.

Я перевірив це, скориставшись цим малюнком-вагентом .

Виконайте таку команду, щоб встановити Домашній журнал , і таким чином встановіть інструменти командного рядка.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Я знаю, що оригінальне запитання лише запитувало, як інсталювати інструменти командного рядка, але я не знаю жодного Mac, який також не має встановленого на ньому Домашнього пива.
0
додано
Якщо ви звернетеся до github.com/Homebrew/install/blob/… Ви побачите, що Homewbrew використовує подібну техніку з описаною в відповідях (наприклад, apple.stackexchange.com/a/ 195963/66169 ) до цього питання
додано Автор Peter Hahndorf, джерело