Bagaimana saya bisa menginstal Alat Baris Perintah sepenuhnya dari baris perintah?

44

Saya ingin membuat skrip instalasi Alat Baris Perintah Xcode.

Di Mavericks,

xcode-select --install

akan membuka dialog yang meminta pengguna untuk menginstal, tetapi saya ingin memicu instalasi tanpa dialog, seperti menggunakan softwareupdateperintah.

Apakah ada cara untuk melakukan ini?

Edit:

Secara khusus, xcode-select --installmeluncurkan aplikasi yang mengunduh dan menginstal alat tanpa mengharuskan pengguna untuk mengunduhnya secara manual atau memiliki akun Pengembang Apple. Tampaknya digunakan /System/Library/CoreServices/Install Command Line Developer Tools.appuntuk melakukan ini.

Saya ingin menggunakan mekanisme yang sama dengan Apple, tetapi tanpa GUI. Saya tidak ingin harus mengunduh secara manual .dmg yang berisi alat-alat karena ini tampaknya rapuh. Apple menyediakan beberapa alat baris perintah lainnya, seperti softwareupdatedan installyang mengunduh atau menginstal perangkat lunak langsung dari Apple, dan saya mencari yang sama untuk jenis distribusi ini.

juga
sumber
1
Apakah Anda mencoba melakukan ini untuk skrip internal atau untuk beberapa jenis distribusi? Alasan saya bertanya adalah karena alat pengembang memerlukan akun pengembang (gratis) untuk mengakses dan mendistribusikannya di luar yang akan melanggar perjanjian lisensi Apple.
Colin C.
1
@ColinC. xcode-select --install tidak memerlukan akun Pengembang Apple. Ini mungkin memerlukan penerimaan perjanjian lisensi sebelum alat digunakan, tetapi itu mengunduh mereka tanpa akun.
juga

Jawaban:

30

Seandainya saya bisa mengklaim kredit untuk yang ini, tetapi saya menemukannya terkubur di https://github.com/chcokr/osx-init/blob/master/install.sh

Ini bekerja pada VM 10.10 tanpa kepala saya tanpa login di UI. Pembaruan diterapkan untuk kompatibilitas dengan setidaknya 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

Ini menganggap Anda hanya memiliki 1 hasil untuk softwareupdate -l | grep "\*.*Command Line"- jika ini mengembalikan beberapa versi, Anda mungkin perlu logika yang lebih spesifik. (Saya tidak punya kasus repro)

satu variasi yang tampaknya berfungsi (pengujian terbatas) pada 10.10-10.14 (10.9 tidak mengembalikan nomor versi osx dalam nama cli tools..jadi ini tidak berfungsi di sana):

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

beberapa contoh hasil:

* 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
tajam
sumber
1
Skrip ini tampaknya menjadi sumber asli untuk kode dan memiliki kode tambahan yang akan berfungsi pada versi Mac OS X di bawah 10.9: github.com/timsutton/osx-vm-templates/blob/…
finn
1
sayangnya itu cukup khas untuk jenis barang yang akan rusak setiap rilis baru, jadi tidak mengherankan .....
tajam
3
Untuk 10.12 (Sierra), yang harus saya ubah di sini adalah "-v" menjadi "--verbose"
macetw
3
Jawaban yang bagus, bekerja untuk saya di Sierra! :-) Namun, Anda mungkin ingin rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progresssetelah menjalankan softwareupdate -i ... , jika tidak panggilan berikutnya softwareupdate -lditampilkan Command Line Tools ... sebagai pembaruan yang tersedia. Pembaruan (yang seharusnya) ini tampaknya tidak ditampilkan di App Store, mungkin karena softwareupdate -lhanya mencantumkan pembaruan "sistem", bukan pembaruan aplikasi.
ssc
1
@ thaimin Saya tidak punya kasus repro yang mengembalikan banyak hasil - tetapi saya memposting pembaruan dengan kemungkinan perbaikan untuk Anda. salah satu tantangannya adalah apel telah sangat tidak konsisten dengan bagaimana mereka menamainya selama bertahun-tahun, jadi benar-benar tidak ada yang super konsisten untuk disortir atau difilter pada ...
tajam
18
  1. Unduh paket Alat Baris Perintah dari situs Pengembang Apple .

  2. Pasang 1 DMG yang diunduh :

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
  3. Jalankan penginstal melalui baris perintah:

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
  4. Setelah selesai, unmount DMG dan hapus unduhan.

    1. Keluarkan DMG 2 .

      cd /
      hdiutil detach /dev/disk3s2
    2. Hapus DMG.

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"

1 Pada saat penulisan, DMG yang diunduh dan nama paketnya akurat, namun di masa depan, nama tersebut dapat berubah. Ingatlah untuk mengubah perintah (atau gunakan tab-completion) untuk mengisi bagian perintah yang relevan.
2 Jika perintah tidak berhasil, periksa disk yang cocok dengan nama mount (sesuai per mount).

GRG
sumber
1
Saya ingin ini menjadi bukti di masa depan, dan saya tidak mau harus menyediakan salinan sendiri dari alat disk image. xcode-select - instal unduhan dan instal alat untuk pengguna, dan itu tidak memerlukan ADC. Saya ingin melakukan ini, tetapi tanpa GUI.
juga
Menemukan poin 1 dan 2 sangat berguna untuk menginstal Perangkat Keras IO.
rstackhouse
6

Alternatifnya adalah menggunakan applescript ini yang saya tulis:

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
brysgo
sumber
1
macos 10.11 Saya mendapatkan kesalahan "osascript tidak diizinkan pada akses bantu"
ClintM
6

Upaya untuk membersihkan gaya dan logika jawaban yang diterima, menjadikannya sebebas-independen versi mungkin, menggunakan softwareupdatedengan kapasitas penuh dan memperkenalkan osvariabel yang dapat digunakan kembali :

#!/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
BaseZen
sumber
hanya sebuah catatan: filter sw_vers tidak bekerja pada berbagai rilis sebelum 10.10. (Saya tidak dapat berbicara dengan 10.11-10.13, hanya diuji hari ini pada 10.9 10.10 dan 10.14) (lihat jawaban saya yang diperbarui untuk beberapa contoh)
tajam
2

Inilah yang saya gunakan, sebagian berdasarkan jawaban brysgo.

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

pembaruan: Apple terus menambahkan kolom baru ke database akses, Anda hanya perlu menentukan nilai untuk 5 pertama, memperbarui kode untuk mencerminkan ini.

Cyberbeni
sumber
1

Beberapa alternatif lagi dapat ditemukan pada jawaban ini:

Unduh Alat Baris Perintah XCode

Anda dapat mengunduh paket XCode 4.x CLTools dari situs unduhan resmi mereka melalui tautan langsung.

Berikut ini adalah skrip yang akan mengotomatiskan proses instalasi untuk Anda 1 .

Untuk menemukan tautan yang diperbarui untuk alat, Anda dapat menggunakan perintah ini:

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] Tolong jangan menyalahgunakan / membebani server mereka

Anda mungkin menemukan bahwa lebih mudah untuk Login terlebih dahulu ke Situs Unduhan Pengembang Apple dan mengunduh Alat Baris Perintah terbaru yang tersedia di sana. Anda kemudian dapat meng-host .dmgpada server repo paket Anda sendiri dan dapat menginstalnya dengan andal .dmgdi banyak mesin hdiutiltanpa harus masuk ke developer.apple.com.

Pada 06/10/2015, tautan ke Alat Baris Perintah terbaru dmgadalah:

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

TrinitronX
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
GRG
1
@grgarside: Butuh waktu untuk memperbarui skrip ini dengan Yosemite / XCode 6.3.2 CLT terbaru dmg, dan menyalin bagian-bagian penting dari jawaban secara lokal untuk jawaban ini.
TrinitronX
@ grgarside: Saya menyadari masalah penautan & bahwa skrip mungkin kedaluwarsa, tetapi tidak punya waktu untuk memperbaruinya pada hari yang sama ketika saya pertama kali memposting. Saya hanya ingin memberikan tautan itu sebagai tempat yang baik untuk memulai dan sebagai catatan untuk diri sendiri untuk kembali dan memperbarui & menguji berbagai hal lagi.
TrinitronX
1

Saya menemukan bahwa jika Anda menginstal Home Brew, itu akan secara otomatis menginstal alat baris perintah.

Saya menguji ini menggunakan gambar gelandangan ini .

Jalankan perintah berikut untuk menginstal Homebrew , dan dengan demikian instal Alat Baris Perintah.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Saya tahu pertanyaan awal hanya bertanya bagaimana cara menginstal Command Line Tools, tapi saya tidak tahu mac apa-apa hari ini yang juga tidak memiliki Home Brew diinstal di dalamnya.
Nathan F.
sumber
Jika Anda melihat github.com/Homebrew/install/blob/… Anda akan melihat Homewbrew menggunakan teknik serupa dengan yang dijelaskan dalam jawaban (misalnya apple.stackexchange.com/a/195963/66169 ) untuk pertanyaan ini
Anon