명령 행에서 명령 행 도구를 완전히 설치하려면 어떻게해야합니까?


44

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

매버릭스에서

xcode-select --install

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

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

편집하다:

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

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


1
내부 스크립트 나 배포를 위해이 작업을 수행하려고합니까? 내가 묻는 이유는 개발자 도구가 (무료) 개발자 계정에 액세스하여 배포 할 수있는 (무료) 개발자 계정이 있어야 Apple 라이센스 계약에 위배되기 때문입니다.
Colin C.

1
@ColinC. xcode-select --install에는 Apple 개발자 계정이 필요하지 않습니다. 도구를 사용하기 전에 라이센스 계약에 동의해야하지만 계정없이 다운로드해야합니다.
또한

답변:


30

이 크레딧에 대한 크레딧을 요청할 수는 있지만 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
이 스크립트는 코드에 대한 원래의 소스로 나타나고 10.9 이하 맥 OS X의 버전에서 작동합니다 추가 코드가 있습니다 github.com/timsutton/osx-vm-templates/blob/...

1
슬프게도 이런 종류의 것들이 모든 새로운 릴리즈에서 깨지는 것은 매우 전형적인 일이므로, 놀라운 사실은 없습니다 .....
keen

3
10.12 (Sierra)의 경우, 여기서 변경해야 할 것은 "-v"가 "--verbose"가되는 것
뿐입니다.

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 여러 결과를 반환하는 모든 재현 사례가 없지만 가능한 수정 사항으로 업데이트를 게시했습니다. 도전 과제 중 하나는 애플이 지난 몇 년간 애플의 이름을 어떻게 바꾸 었는지에 따라 일관성이 없어서 정렬하거나 필터링 할 수있는 최고의 일관성이 없다는 것입니다.
keen

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


1
나는 이것이 미래의 증거가되기를 원하며, 나는 자신의 도구 디스크 이미지 사본을 제공 할 필요가 없다. xcode-select --install은 사용자를위한 도구를 다운로드하고 설치하며 ADC가 필요하지 않습니다. GUI를 사용하지 않고 정확하게하고 싶습니다.
또한

발견 지점 1 및 2는 하드웨어 IO 도구 설치에 매우 유용합니다.
rstackhouse 2016 년

6

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

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 "
어시스트

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 이전의 다양한 릴리스에서 작동하지 않습니다. (몇 가지 예에 대한 내 업데이트 된 대답을 참조) (I은 10.9 10.10 및 10.14 오늘 시험, 10.11-10.13에 말할 수 없다)
예리한

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자신의 패키지 저장소 서버에서 호스트하고 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


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
grg

1
@grgarside : 이 스크립트 를 최신 Yosemite / XCode 6.3.2 CLT 로 업데이트하는 데 시간이 걸렸 dmg으며 답의 핵심 부분을이 답변에 로컬로 복사했습니다.
TrinitronX

@ grgarside : 나는 연결 문제를 깨달았고 스크립트가 오래되었을 수도 있지만 처음 게시 한 날에 업데이트 할 시간이 없었습니다. 나는 그 링크를 시작하기에 좋은 장소로, 다시 돌아가서 업데이트하고 다시 테스트 할 수있는 메모로 제공하고 싶었습니다.
TrinitronX 2016 년

1

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

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

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

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

당신이 보면 github.com/Homebrew/install/blob/... 당신은 Homewbrew은 (예를 들어 대한 답변에서 설명한 것과 유사한 techinque 사용하고 볼 수 apple.stackexchange.com/a/195963/66169 이 질문을)
익명을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.