Komut Satırı Araçları'nı komut satırından tamamen nasıl yükleyebilirim?


44

Xcode Komut Satırı Araçları'nın kurulumunu kodlamak istiyorum.

Mavericks'te

xcode-select --install

Kullanıcının yüklenmesini isteyen bir iletişim kutusu açacaktır, ancak softwareupdatekomutu kullanmaya benzer şekilde, iletişim kutusu olmadan yüklemeyi tetiklemek istiyorum .

Bunu yapmanın bir yolu var mı?

Düzenle:

Özellikle, xcode-select --installkullanıcının manuel olarak indirmesini veya bir Apple Geliştirici hesabına sahip olmasını gerektirmeden araçları indirip yükleyen bir uygulama başlatır. Bunu /System/Library/CoreServices/Install Command Line Developer Tools.appyapmak için kullanmak için görünüyor .

Apple'ın olduğu gibi fakat GUI'siz bir mekanizma kullanmak istiyorum. Bu kırılgan görünüyor gibi araçları içeren .dmg el ile indirmek zorunda istemiyorum. Apple, doğrudan Apple'dan yazılım indiren ya da yükleyen softwareupdateve benzeri başka komut satırı araçları sağlar ve installbu tür dağıtım için de aynısını bulmaya çalışıyorum.


1
Bunu dahili bir komut dosyası için mi yoksa bir tür dağıtım için mi yapmaya çalışıyorsunuz? Sormamın sebebi, geliştirici araçlarının Apple'ın lisans sözleşmesini ihlal edecek şekilde bunlara erişmek ve dağıtmak için (ücretsiz) bir geliştirici hesabı gerektirmesidir.
Colin C.

1
@ColinC. xcode-select --install, bir Apple Developer hesabı gerektirmez. Araçlar kullanılmadan önce lisans sözleşmesinin kabul edilmesini gerektirebilir, ancak bir hesap olmadan bunları indirir.
ayrıca

Yanıtlar:


30

Keşke bunun için kredi talep edebilseydim, ancak https://github.com/chcokr/osx-init/blob/master/install.sh adresinde gömülü olduğumu tespit ettim.

Bu, 10.10 başsız VM'mde oturum açmış bir kullanıcı arayüzü olmadan çalıştı. En az 10.9-10.14 ile uyumluluk için uygulanan güncellemeler

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

Bu, sadece 1 sonucunuz olduğunu varsayar softwareupdate -l | grep "\*.*Command Line"- eğer birden fazla versiyon döndürürse, daha spesifik bir mantığa ihtiyacınız olabilir. (Repro davam yok)

10.10-10.14'te (sınırlı test) çalışıyor gibi görünen bir varyasyon (10.9, cli araçları adında bir osx sürüm numarası döndürmüyor. bu nedenle orada çalışmaz):

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')

birkaç örnek sonuç:

* 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

1
Bu komut dosyası, kodun orijinal kaynağı gibi görünüyor ve 10.9'un
finn

1
ne yazık ki hiçbir gerçek sürpriz böylece ....., her yeni sürümü kırılması şeyler bu tür oldukça tipik
düşkün

3
10.12 (Sierra) için, burada değiştirmek zorunda olduğum tek şey "-v" nin "--verbose"
olmasıydı

3
Harika cevap, Sierra'da benim için çalışıyor! :-) Ancak, rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progressçalıştıktan sonra kullanmak isteyebilirsiniz softwareupdate -i ... , aksi halde mevcut bir güncelleme olarak softwareupdate -lgörüntülemek için sonraki çağrılar Command Line Tools ... . Bu (sözde) güncelleme App Store'da görünmüyor, muhtemelen softwareupdate -luygulama güncellemelerini değil, yalnızca "sistem" güncellemelerini listeliyor.
ssc

1
@thaimin Birden fazla sonuç döndüren herhangi bir repro vakası yok - ancak sizin için olası bir düzeltmeyle ilgili bir güncelleme yayınladım. Zorluklardan biri, Apple'ın bunları yıllar içinde nasıl adlandırdıklarıyla çok tutarsız olduğu, bu yüzden gerçekten sıralamak veya filtrelemek için süper tutarlı bir şey yok ...
keskin

18
  1. Komut Satırı Araçları paketini Apple Developer sitesinden indirin .

  2. İndirilen 1 DMG'yi bağlayın:

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
  3. Yükleyiciyi komut satırı üzerinden çalıştırın:

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
  4. Tamamlandığında, DMG'yi çıkarın ve indirme işlemini silin.

    1. DMG 2'yi çıkarın .

      cd /
      hdiutil detach /dev/disk3s2
    2. DMG'yi silin.

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"

1 Yazma sırasında, indirilen DMG ve paket adı doğrudur, ancak gelecekte isim değişebilir. Komutun ilgili bölümünü doldurmak için komutu değiştirmeyi (veya sekme tamamlamayı kullanmayı) unutmayın.
2 Komut işe yaramazsa, diskin takma adla eşleştiğini kontrol edin (başına mount).


1
Bunun gelecekteki kanıtı olmasını isterdim ve araçlar disk imgesinin kendi kopyasını sağlamak istemiyorum. xcode-select --install, kullanıcı için araçları indirip yükler ve ADC gerektirmez. Tam olarak bunu yapmak istiyorum, ancak GUI olmadan.
ayrıca

Donanım IO Araçlarını kurmak için 1 ve 2 numaralı noktaların çok faydalı olduğu bulundu.
rstackhouse

6

Bir alternatif yazdığım bu el yazısını kullanmaktır:

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

1
macos 10.11 "Yardımcı erişimde
osascript'e

6

Kabul edilen cevaplayıcı stilini ve mantığını temizleme, mümkün olduğunca versiyondan bağımsız hale getirme softwareupdate, tüm kapasitesini kullanarak ve yeniden kullanılabilir bir osdeğişken getirme çabası :

#!/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

sadece bir not: sw_vers filtresi 10.10'dan önceki çeşitli sürümlerde çalışmaz. (Bazı örnekler için benim güncellenmiş cevabı bakınız) (sadece 10.9 10.10 ve 10.14 bugün test, 10.11-10.13 konuşamıyor)
düşkün

2

Kısaca brysgo'nun cevabına dayanarak kullandığım şey bu.

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

if [[ "$(xcode-select -p)" == "" ]]; then
  printf "\n### Installing Xcode command line tools\n"
  xcode-select --install
  sleep 2
  osascript <<EOD
    tell application "System Events"
      tell process "Install Command Line Developer Tools"
        click button "Install" of window ""
        click button "Agree" of window "License Agreement"
        repeat until exists button "Done" of window ""
          delay 1
        end repeat
        click button "Done" of window ""
      end tell
    end tell
EOD
fi

güncelleme: Apple erişim veritabanına yeni sütunlar eklemeye devam ediyor, yalnızca ilk 5 için değerleri belirlemeniz gerekiyor, kodu yansıtacak şekilde güncellendi.


1

Bu cevaplarda birkaç alternatif daha bulunabilir:

XCode Komut Satırı Araçlarını İndir

XCode 4.x CLTools paketlerini resmi indirme sitelerinden doğrudan linklerle indirebilirsiniz.

İşte sizin için yükleme işlemini otomatikleştirecek bir komut dosyası 1 .

Araçların güncellenmiş bağlantılarını bulmak için bu komutu kullanabilirsiniz:

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] Lütfen sunucularını kötüye kullanmayın / aşırı yüklemeyin

Önce Apple Developer Download Sitesine Giriş Yapmanın ve orada bulunan en son Komut Satırı Araçlarını indirmenin daha kolay olduğunu fark edebilirsiniz . Ardından .dmg, kendi paket repo sunucunuzu barındırabilir ve .dmgbirçok makineye hdiutildeveloper.apple.com sitesine giriş yapmanıza gerek kalmadan güvenle yükleyebilirsiniz .

06/10/2015 itibariyle, en son Komut Satırı Araçlarına bağlantı dmg:

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


Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
grg

1
@ grgarside: Bu betiği en son Yosemite / XCode 6.3.2 CLT ile güncellemek biraz zaman aldı dmgve cevabın temel kısımlarını yerel olarak bu cevaba kopyaladı.
TrinitronX

@ grgarside: Bağlantı sorununu fark ettim ve betiğin muhtemelen güncel değil, ancak başlangıçta gönderdiğim aynı günde güncellemek için zamanı yoktu. Ben sadece bu bağlantıları başlatmak için iyi bir yer, geri dönüp güncelleme ve tekrar bir şeyler test etmek için kendime bir not olarak vermek istedim.
TrinitronX

1

Home Brew'ı kurarsanız, komut satırı araçlarını otomatik olarak kuracağını buldum.

Bunu bu serseri görüntüyü kullanarak test ettim .

Homebrew'i yüklemek için aşağıdaki komutu çalıştırın ve bunu yaparken Komut Satırı Araçlarını yükleyin.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Orjinal sorunun sadece Komut Satırı Araçlarının nasıl kurulacağını sorduğunu biliyorum, fakat bugünlerde Home Brew yüklü olmayan herhangi bir mac bilmiyorum.

Eğer github.com/Homebrew/install/blob/… 'e bakarsanız, Homewbrew'un bu sorunun cevaplarında (örneğin apple.stackexchange.com/a/195963/66169 ) tarif edilene benzer bir teknik kullandığını göreceksiniz
Anon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.