मैं कमांड लाइन टूल्स को कमांड लाइन से पूरी तरह से कैसे स्थापित कर सकता हूं?


44

मैं Xcode कमांड लाइन टूल्स की स्थापना को स्क्रिप्ट करना चाहता हूं।

मावेरिक्स पर,

xcode-select --install

उपयोगकर्ता को स्थापित करने के लिए संकेत देने वाला एक डायलॉग खोलेगा, लेकिन मैं softwareupdateकमांड का उपयोग करते हुए, संवाद के बिना इंस्टॉल को ट्रिगर करना चाहूंगा ।

क्या इसे करने का कोई तरीका है?

संपादित करें:

विशेष रूप से, xcode-select --installएक एप्लिकेशन लॉन्च करता है जो उपयोगकर्ता को मैन्युअल रूप से उन्हें डाउनलोड करने या Apple डेवलपर खाते की आवश्यकता के बिना टूल को डाउनलोड और इंस्टॉल करता है। यह ऐसा करने के लिए उपयोग /System/Library/CoreServices/Install Command Line Developer Tools.appकरने के लिए प्रकट होता है ।

मैं उसी तंत्र का उपयोग करना चाहूंगा जो Apple है, लेकिन GUI के बिना। मैं मैन्युअल रूप से डाउनलोड करने के लिए नहीं करना चाहता .dmg युक्त उपकरण के रूप में यह नाजुक लगता है। Apple कई अन्य कमांड-लाइन टूल प्रदान करता है, जैसे कि softwareupdateऔर installवह ऐप्पल से सीधे सॉफ़्टवेयर डाउनलोड या इंस्टॉल करता है, और मैं इस प्रकार के वितरण के लिए समान खोज रहा हूं।


1
क्या आप आंतरिक स्क्रिप्ट के लिए या किसी प्रकार के वितरण के लिए ऐसा करने की कोशिश कर रहे हैं? कारण मैं पूछता हूं क्योंकि डेवलपर टूल को ऐप्पल के लाइसेंसिंग समझौते का उल्लंघन करने वालों के उपयोग और वितरण के लिए उन्हें (मुफ्त) डेवलपर खाते की आवश्यकता होती है।
कॉलिन सी।

1
@ColinC। xcode- चयन - स्थापना के लिए Apple डेवलपर खाते की आवश्यकता नहीं होती है। उपकरण के उपयोग से पहले लाइसेंस समझौते की स्वीकृति की आवश्यकता हो सकती है, लेकिन यह उन्हें बिना किसी खाते के डाउनलोड करता है।
भी

जवाबों:


30

काश मैं इसके लिए श्रेय का दावा कर सकता, लेकिन मैंने इसे https://github.com/chcokr/osx-init/blob/master/install.sh में दफन पाया।

यह यूआई में लॉग इन किए बिना मेरे 10.10 हेडलेस वीएम पर काम किया। कम से कम 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 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
: यह स्क्रिप्ट कोड के लिए मूल स्रोत हो गया लगता है और अतिरिक्त कोड है कि 10.9 नीचे मैक ओएस एक्स के संस्करणों पर काम करेंगे है github.com/timsutton/osx-vm-templates/blob/...
फिन

1
दुख की बात यह है कि इस प्रकार के सामान को हर नई रिलीज के लिए तोड़ दिया जाता है, इसलिए कोई आश्चर्य की बात नहीं है .....
उत्सुक

3
१०.१२ (सिएरा) के लिए, मुझे यहाँ सब बदलना था
-व

3
महान जवाब, सिएरा पर मेरे लिए काम करता है! :-) हालाँकि, आप rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progressरनिंग के बाद softwareupdate -i ... , अन्यथा उपलब्ध कॉल के रूप में softwareupdate -lप्रदर्शित करने के लिए कॉल कर सकते हैं Command Line Tools ... । यह (माना) अपडेट ऐप स्टोर में नहीं दिखाया गया है, संभवतः क्योंकि softwareupdate -lकेवल "सिस्टम" अपडेट सूचीबद्ध करता है, एप्लिकेशन अपडेट नहीं।
ssc

1
@ थिमिन के पास कोई भी रिप्रो केस नहीं है जो कई परिणाम लौटाते हैं - लेकिन मैंने आपके लिए संभावित फिक्स के साथ एक अपडेट पोस्ट किया है। चुनौतियों में से एक यह है कि सेब कैसे वे पिछले कुछ वर्षों में इन नाम के साथ बहुत असंगत रहा है तो वहाँ वास्तव में सुपर सॉर्ट करने के लिए या संगत पर फिल्टर कुछ भी नहीं ...
उत्सुक

18
  1. Apple डेवलपर साइट से कमांड लाइन टूल पैकेज डाउनलोड करें ।

  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 लेखन के समय, डाउनलोड किया हुआ डीएमजी और पैकेज नाम सटीक है, हालांकि भविष्य में, नाम बदल सकता है। कमांड के संबंधित भाग को भरने के लिए कमांड को बदलना (या टैब-पूरा करने का उपयोग करना) याद रखें।
2 यदि कमांड काम नहीं करता है, तो डिस्क को माउंट के नाम से मिलान करें (प्रति mount)।


1
मैं चाहूंगा कि यह भविष्य का प्रमाण हो, और मुझे उपकरण डिस्क छवि की अपनी प्रति प्रदान करने की आवश्यकता नहीं है। xcode-select - उपयोगकर्ता के लिए उपकरण डाउनलोड और इंस्टॉल करता है, और इसके लिए ADC की आवश्यकता नहीं होती है। मैं ठीक यही करना चाहता हूं, लेकिन बिना जीयूआई के।
भी

हार्डवेयर आईओ उपकरण स्थापित करने के लिए अंक 1 और 2 बहुत उपयोगी हैं।
रस्टाकहाउस

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
मैकोस १०.११ मैं त्रुटि मिलती है "सहायक पहुंच पर ऑसस्क्रिप्ट की अनुमति नहीं है"
क्लिंटन

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

बस एक ध्यान दें: 10._ से पहले विभिन्न रिलीज पर sw_vers फ़िल्टर काम नहीं करता है। (मैं 10.11-10.13 से बात नहीं कर सकते, केवल 10.9 10.10 और 10.14 पर आज परीक्षण किया) (कुछ उदाहरण के लिए मेरे अद्यतन उत्तर देखें)
उत्सुक

2

यह वही है जो मैं उपयोग करता हूं, आंशिक रूप से ब्रिस्गो के उत्तर पर आधारित है।

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

[१] कृपया दुरुपयोग न करें / उनके सर्वर को अधिभारित न करें

आप पा सकते हैं कि ऐप्पल डेवलपर डाउनलोड साइट पर पहले लॉगिन करना और वहां उपलब्ध नवीनतम कमांड लाइन टूल डाउनलोड करना आसान है । आप तब होस्ट कर सकते हैं.dmg अपने स्वयं के पैकेज रेपो सर्वर पर और डेवलपर.apple.com पर लॉगिन किए बिना .dmgकई मशीनों पर मज़बूती से स्थापित करने में सक्षम हो सकते हैं hdiutil

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


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
GRG

1
@grgarside: इस स्क्रिप्ट को नवीनतम Yosemite / XCode 6.3.2 CLT के साथ अपडेट करने के लिए कुछ समय लिया dmg, और स्थानीय रूप से इस उत्तर के आवश्यक भागों की प्रतिलिपि बनाई।
ट्रिनिट्रॉनएक्स

@grgarside: मुझे लिंकिंग समस्या का एहसास हुआ और यह कि स्क्रिप्ट शायद पुरानी थी, लेकिन इसे उसी दिन अपडेट करने का समय नहीं था जिस दिन मैंने शुरुआत में पोस्ट किया था। मैं सिर्फ उन लिंक को शुरू करने के लिए एक अच्छी जगह के रूप में देना चाहता था और वापस जाने और चीजों को फिर से अपडेट करने और परीक्षण करने के लिए स्वयं के लिए एक नोट के रूप में।
त्रिनिट्रॉनएक्स

1

मैंने पाया कि यदि आप होम ब्रू स्थापित करते हैं, तो यह स्वचालित रूप से कमांड लाइन टूल स्थापित करेगा।

मैंने इसका उपयोग करके परीक्षण किया इस योनि छवि इसका

Homebrew को स्थापित करने के लिए निम्न कमांड चलाएँ , और ऐसा करने में कमांड लाइन टूल्स स्थापित करें।

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • मुझे पता है कि मूल प्रश्न केवल कमांड लाइन टूल्स को स्थापित करने का तरीका है, लेकिन मैं इन दिनों किसी भी मैक को नहीं जानता हूं जिसमें होम ब्रू भी नहीं है।

यदि आप github.com/Homebrew/install/blob/ पर नजर डालते हैं, तो आप देखेंगे कि Homewbrew इस प्रश्न के उत्तर में वर्णित उदाहरण (उदाहरण के लिए apple.stackexchange.com/a/195963-66169 ) पर एक समान टेचींक का उपयोग कर रहा है
Anon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.