ฉันจะติดตั้งเครื่องมือบรรทัดคำสั่งอย่างสมบูรณ์จากบรรทัดคำสั่งได้อย่างไร


44

ฉันต้องการสคริปต์การติดตั้งเครื่องมือบรรทัดคำสั่ง Xcode

บน Mavericks

xcode-select --install

จะเปิดกล่องโต้ตอบเพื่อให้ผู้ใช้ติดตั้ง แต่ฉันต้องการทริกเกอร์การติดตั้งโดยไม่มีกล่องโต้ตอบเช่นใช้softwareupdateคำสั่ง

มีวิธีทำเช่นนี้หรือไม่?

แก้ไข:

โดยเฉพาะxcode-select --installเปิดตัวแอปพลิเคชันที่ดาวน์โหลดและติดตั้งเครื่องมือโดยไม่ต้องการให้ผู้ใช้ดาวน์โหลดด้วยตนเองหรือมีบัญชี Apple Developer ดูเหมือนว่าจะใช้/System/Library/CoreServices/Install Command Line Developer Tools.appในการทำเช่นนี้

ฉันต้องการใช้กลไกเดียวกับที่ Apple เป็น แต่ไม่มี GUI ฉันไม่ต้องการดาวน์โหลด. dmg ที่มีเครื่องมือด้วยตนเองเนื่องจากดูเหมือนว่าจะบอบบาง Apple มีเครื่องมือบรรทัดคำสั่งอื่น ๆ อีกมากมายเช่นsoftwareupdateและinstallดาวน์โหลดหรือติดตั้งซอฟต์แวร์โดยตรงจาก Apple และฉันกำลังมองหาสิ่งเดียวกันสำหรับการกระจายประเภทนี้


1
คุณพยายามทำสิ่งนี้กับสคริปต์ภายในหรือเพื่อการแจกจ่ายบางอย่าง? เหตุผลที่ฉันถามก็คือเนื่องจากเครื่องมือของนักพัฒนาซอฟต์แวร์จำเป็นต้องมีบัญชีนักพัฒนาซอฟต์แวร์ (ฟรี) เพื่อเข้าถึงและแจกจ่ายนอกซึ่งจะเป็นการละเมิดข้อตกลงใบอนุญาตของ Apple
โคลินซี

1
@ColinC xcode-select - การติดตั้งไม่จำเป็นต้องมีบัญชี Apple Developer อาจต้องมีการยอมรับข้อตกลงใบอนุญาตก่อนที่จะใช้เครื่องมือ แต่ดาวน์โหลดได้โดยไม่ต้องมีบัญชี
ยัง

คำตอบ:


30

หวังว่าฉันจะได้รับเครดิตสำหรับสิ่งนี้ แต่ฉันพบว่ามันถูกฝังในhttps://github.com/chcokr/osx-init/blob/master/install.sh

สิ่งนี้ใช้ได้กับหัวขาด VM 10.10 ของฉันโดยไม่ต้องลงชื่อเข้าใช้ UI มีการอัปเดตที่ใช้สำหรับความเข้ากันได้อย่างน้อย 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

สิ่งนี้อนุมานว่าคุณมีผลลัพธ์เพียง 1 รายการ softwareupdate -l | grep "\*.*Command Line"- หากสิ่งนี้ส่งคืนหลายเวอร์ชันคุณอาจต้องการตรรกะที่เฉพาะเจาะจงมากขึ้น (ฉันไม่ได้รับเรื่องซ้ำซาก)

รูปแบบหนึ่งที่ดูเหมือนว่าจะใช้งานได้ (การทดสอบที่ จำกัด ) ในวันที่ 10.10-10.14 (10.9 จะไม่ส่งคืนหมายเลขเวอร์ชัน osx ในชื่อเครื่องมือ cli .. ดังนั้นนี่จึงใช้งานไม่ได้):

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

ตัวอย่างผลลัพธ์บางประการ:

* 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
สคริปต์นี้ดูเหมือนจะเป็นแหล่งต้นฉบับของรหัสและมีรหัสเพิ่มเติมที่จะทำงานกับรุ่นของ Mac OS X ที่ต่ำกว่า 10.9: github.com/timsutton/osx-vm-templates/blob/ …
สิ้นสุด

1
น่าเศร้าที่มันเป็นเรื่องปกติสำหรับสิ่งต่าง ๆ ที่จะถูกทำลายทุกรุ่นใหม่ดังนั้นจึงไม่แปลกใจจริง ๆ .....
keen

3
สำหรับ 10.12 (เซียร์) สิ่งที่ฉันต้องเปลี่ยนคือ "-v" เพื่อกลายเป็น "- verbose"
macetw

3
คำตอบที่ดีใช้งานได้กับ Sierra! :-) อย่างไรก็ตามคุณอาจต้องการrm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progressหลังจากเรียกใช้softwareupdate -i ... มิฉะนั้นการโทรที่ตามมาเพื่อsoftwareupdate -lแสดงCommand Line Tools ... เป็นการอัปเดตที่มีอยู่ ดูเหมือนว่าการอัปเดต (ควร) นี้จะไม่ปรากฏใน App Store อาจเป็นเพราะsoftwareupdate -lรายการการอัปเดต "ระบบ" เท่านั้นไม่ใช่การอัปเดตแอปพลิเคชัน
ssc

1
@thaimin ฉันไม่มีกรณีการทำซ้ำที่ส่งคืนผลลัพธ์หลายรายการ - แต่ฉันโพสต์การอัปเดตพร้อมการแก้ไขที่เป็นไปได้สำหรับคุณ หนึ่งในความท้าทายคือแอปเปิ้ลไม่สอดคล้องกับวิธีที่พวกเขาตั้งชื่อเหล่านี้ตลอดหลายปีที่ผ่านมาดังนั้นจึงไม่มีอะไรที่สอดคล้องกับการเรียงลำดับหรือกรอง ...
kan

18
  1. ดาวน์โหลดแพคเกจเครื่องมือบรรทัดคำสั่งจากเว็บไซต์ของผู้พัฒนาแอปเปิ้ล

  2. ติด1 DMG ที่ดาวน์โหลด:

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
  3. เรียกใช้โปรแกรมติดตั้งผ่านทางบรรทัดคำสั่ง:

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
  4. เมื่อเสร็จแล้วให้ยกเลิกการต่อเชื่อม DMG และลบการดาวน์โหลด

    1. นำ DMG 2ออก

      cd /
      hdiutil detach /dev/disk3s2
    2. ลบ DMG

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"

1ในขณะที่เขียน DMG ที่ดาวน์โหลดมาและชื่อแพคเกจนั้นถูกต้องอย่างไรก็ตามในอนาคตชื่อนั้นอาจมีการเปลี่ยนแปลง อย่าลืมเปลี่ยนคำสั่ง (หรือใช้แท็บเสร็จ) เพื่อกรอกข้อมูลในส่วนที่เกี่ยวข้องของคำสั่ง
2หากคำสั่งใช้งานไม่ได้ให้ตรวจสอบดิสก์ที่ตรงกับชื่อของตัวยึด (ตามmount)


1
ฉันต้องการให้สิ่งนี้เป็นข้อพิสูจน์ในอนาคตและฉันไม่ต้องการให้สำเนาดิสก์อิมเมจสำหรับเครื่องมือของฉันเอง xcode-select - ติดตั้งการดาวน์โหลดและติดตั้งเครื่องมือสำหรับผู้ใช้และไม่จำเป็นต้องใช้ ADC ฉันต้องการทำสิ่งนี้ แต่ไม่มี GUI
ยัง

พบจุดที่ 1 และ 2 มีประโยชน์มากสำหรับการติดตั้ง Hardware IO Tools
rstackhouse

6

อีกทางเลือกหนึ่งคือใช้ applescript นี้ที่ฉันเขียน:

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 ฉันจะได้รับข้อผิดพลาด "osascript ไม่ได้รับอนุญาตในการเข้าถึงสิ่งอำนวยความสะดวก"
ClintM

6

ความพยายามในการล้างข้อมูลสไตล์และตรรกะของคำตอบที่ยอมรับทำให้เป็นเวอร์ชั่นที่เป็นไปได้มากที่สุด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

เพียงทราบ: ตัวกรอง sw_vers ไม่ทำงานในรุ่นต่างๆก่อน 10.10 (ฉันไม่สามารถพูดคุยกับ 10.11-10.13, การทดสอบเฉพาะในวันนี้ 10.9 10.10 และ 10.14) (ดูคำตอบของฉันสำหรับการปรับปรุงตัวอย่างบางส่วน)
กระตือรือร้น

2

นี่คือสิ่งที่ฉันใช้ส่วนหนึ่งขึ้นอยู่กับคำตอบของ 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

อัปเดต: Apple ยังคงเพิ่มคอลัมน์ใหม่ในฐานข้อมูลการเข้าถึงคุณจะต้องระบุค่าสำหรับ 5 ตัวแรกอัปเดตรหัสเพื่อแสดงถึงสิ่งนี้


1

คำตอบเหล่านี้อาจมีทางเลือกอีกสองสามข้อ:

ดาวน์โหลดเครื่องมือบรรทัดคำสั่ง XCode

คุณสามารถดาวน์โหลดแพ็คเกจ XCode 4.x CLTools ได้จากเว็บไซต์ดาวน์โหลดอย่างเป็นทางการผ่านลิงก์โดยตรง

นี่คือสคริปต์ที่จะทำให้การติดตั้งกระบวนการสำหรับคุณ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บนเซิร์ฟเวอร์ repo แพ็คเกจของคุณเองและสามารถติดตั้ง.dmgบนเครื่องหลายเครื่องได้อย่างน่าเชื่อถือhdiutilโดยไม่ต้องลงชื่อเข้าใช้ที่ developer.apple.com

ตั้งแต่วันที่ 06/10/2558 ลิงค์ไปยังเครื่องมือบรรทัดคำสั่งล่าสุดdmgคือ:

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


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
grg

1
@grgarside: ใช้เวลาสักครู่เพื่ออัปเดตสคริปต์นี้ด้วย Yosemite / XCode 6.3.2 CLT ล่าสุดdmgและคัดลอกส่วนสำคัญของคำตอบในเครื่องไปยังคำตอบนี้
TrinitronX

@grgarside: ฉันตระหนักถึงปัญหาการเชื่อมโยง & สคริปต์อาจล้าสมัย แต่ไม่มีเวลาอัปเดตในวันเดียวกับที่ฉันโพสต์ครั้งแรก ฉันแค่ต้องการให้ลิงก์เหล่านั้นเป็นจุดเริ่มต้นที่ดีและเพื่อเป็นข้อสังเกตในการย้อนกลับและอัปเดตและทดสอบสิ่งต่าง ๆ อีกครั้ง
TrinitronX

1

ฉันพบว่าถ้าคุณติดตั้ง Home Brew มันจะติดตั้งเครื่องมือบรรทัดคำสั่งโดยอัตโนมัติ

ฉันทดสอบสิ่งนี้โดยใช้ภาพคนเร่ร่อนนี้

รันคำสั่งต่อไปนี้เพื่อติดตั้งHomebrewและทำการติดตั้งเครื่องมือบรรทัดคำสั่ง

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • ฉันรู้ว่าคำถามเดิมถามเพียงวิธีการติดตั้งเครื่องมือบรรทัดคำสั่ง แต่ฉันไม่ทราบว่า mac วันนี้ที่ยังไม่มี Home Brew ติดตั้งอยู่

ถ้าคุณดูที่github.com/Homebrew/install/blob/ …คุณจะเห็น Homewbrew กำลังใช้ techinque ที่คล้ายกับที่อธิบายไว้ในคำตอบ (เช่นapple.stackexchange.com/a/195963/66169 ) สำหรับคำถามนี้
Anon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.