명령 행에서 명령 행 도구를 완전히 설치하려면 어떻게해야합니까? 수동으로 도구를 다운로드하거나 Apple 개발자 계정이 없어도

Xcode 명령 줄 도구 설치를 스크립트로 작성하고 싶습니다.

매버릭스에서

xcode-select --install

사용자에게 설치하라는 대화 상자가 열리지 만 softwareupdate명령을 사용하는 것처럼 대화 상자없이 설치를 트리거하고 싶습니다 .

이것을 할 수있는 방법이 있습니까?

편집하다:

특히, xcode-select --install사용자가 수동으로 도구를 다운로드하거나 Apple 개발자 계정이 없어도 도구를 다운로드하여 설치하는 응용 프로그램을 시작합니다. 이 /System/Library/CoreServices/Install Command Line Developer Tools.app작업을 수행하는 데 사용 됩니다.

Apple과 동일한 메커니즘을 사용하지만 GUI는 사용하지 않고 싶습니다. 도구가 포함 된 .dmg를 수동으로 다운로드하고 싶지는 않습니다. 애플은 같은 몇 가지 다른 명령 줄 도구를 제공 softwareupdate하고 install애플에서 직접 그 다운로드 또는 설치 소프트웨어를, 그리고 유통의이 유형에 대해 동일한을 찾기 위해 찾고 있어요.



답변

이 크레딧에 대한 크레딧을 요청할 수는 있지만 https://github.com/chcokr/osx-init/blob/master/install.sh에 묻혔습니다.

이것은 UI에 로그인하지 않고 10.10 헤드리스 VM에서 작동했습니다. 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

이것은 하나의 결과 만 가정
softwareupdate -l | grep "\*.*Command Line"합니다. 여러 버전을 반환하는 경우 더 구체적인 논리가 필요할 수 있습니다. (나는 재현 사건이 없다)

10.10-10.14에서 작동하는 것으로 보이는 한 가지 변형 (제한된 테스트) (10.9는 CLI 도구 이름에 osx 버전 번호를 반환하지 않습니다.

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. 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 작성 당시 다운로드 한 DMG 및 패키지 이름은 정확하지만 나중에 이름이 변경 될 수 있습니다. 명령의 관련 부분을 채우려면 명령을 변경하거나 탭 완성을 사용해야합니다.
2 명령이 작동하지 않으면 디스크가 마운트 이름과 일치하는지 확인하십시오 ( mount).


답변

대안은 내가 쓴이 애플 스크립트를 사용하는 것입니다.

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


답변

허용되는 답변의 스타일과 논리를 정리 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


답변

이것은 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의 값만 지정하면이를 반영하도록 코드가 업데이트됩니다.


답변

이 답변에는 몇 가지 대안이 더 있습니다.

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자신의 패키지 저장소 서버에서 호스트하고 developer.apple.com에 로그인하지 않고도 .dmg여러 시스템에 안정적으로 설치할 수 있습니다 hdiutil.

2015 년 10 월 6 일 현재 최신 명령 줄 도구에 대한 링크 dmg는 다음과 같습니다.


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


답변

Home Brew를 설치하면 명령 줄 도구가 자동으로 설치됩니다.

나는 이 방랑 한 이미지를 사용하여 이것을 테스트했다 .

다음 명령을 실행하여 Homebrew를 설치하고 명령 행 도구를 설치하십시오.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 원래 질문에 명령 줄 도구를 설치하는 방법 만 묻었지만 요즘 Home Brew가 설치되어 있지 않은 Mac은 없습니다.