70 votos

¿Cómo puedo instalar las herramientas de línea de comandos completamente desde la línea de comandos?

Me gustaría scribir la instalación de las herramientas de línea de comandos de Xcode.

En los Mavericks,

xcode-select --install

abrirá un diálogo solicitando al usuario la instalación, pero me gustaría desencadenar la instalación sin el diálogo, como si se utilizara el botón softwareupdate comando.

¿Hay alguna forma de hacerlo?

Editar:

Específicamente, xcode-select --install lanza una aplicación que descarga e instala las herramientas sin necesidad de que el usuario las descargue manualmente o tenga una cuenta de desarrollador de Apple. Parece que utiliza /System/Library/CoreServices/Install Command Line Developer Tools.app para hacer esto.

Me gustaría utilizar el mismo mecanismo que Apple, pero sin la interfaz gráfica de usuario. No quiero tener que descargar manualmente el .dmg que contiene las herramientas ya que esto parece frágil. Apple proporciona otras herramientas de línea de comandos, como softwareupdate y install que descargan o instalan software directamente desde Apple, y estoy buscando encontrar lo mismo para este tipo de distribución.

1 votos

¿Estás intentando hacer esto para un script interno o para algún tipo de distribución? La razón por la que pregunto es porque las herramientas para desarrolladores requieren una cuenta de desarrollador (gratuita) para acceder y distribuirlas fuera de ella violaría el acuerdo de licencia de Apple.

1 votos

@ColinC. xcode-select --install no requiere una cuenta de desarrollador de Apple. Puede requerir la aceptación del acuerdo de licencia antes de utilizar las herramientas, pero las descarga sin necesidad de una cuenta.

49voto

keen Puntos 144

Ojalá pudiera atribuirme el mérito, pero lo encontré enterrado en https://github.com/chcokr/osx-init/blob/master/install.sh

Esto funcionó en mi 10.10 headless VM sin un UI conectado. Actualizaciones aplicadas para la compatibilidad con al menos 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

Esto supone que sólo tiene 1 resultado para softwareupdate -l | grep "\*.*Command Line" - si esto devuelve varias versiones, es posible que necesite una lógica más específica. (No tengo un caso de reproducción)

una variación que parece funcionar (pruebas limitadas) en 10.10-10.14 (10.9 no devuelve un número de versión de osx en el nombre de las herramientas cli..así que esto no funciona allí):

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

algunos ejemplos de resultados:

* 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

0 votos

Hay un paso extra para solicitar la contraseña de sudo. ¿Cómo eliminar eso?

3 votos

Para Catalina, hay que modificar ligeramente el comando softwareupdate -l | grep "*.*Línea de comandos" | tail -n 1 | awk -F "*" '{print $2}' | sed -e 's/^ *//' | sed 's/Etiqueta: //g' | tr -d ' \n '

1 votos

@jinbeomhong, podrías aplicar el bit setuid en el script (chmod u+s <nombre del script>), y entonces no tendrías que introducir la contraseña sudo. Esto puede ser un riesgo de seguridad si alguien más tiene acceso a su computadora, así que caveat emptor.

21voto

siva Puntos 23
  1. Descargue el paquete de herramientas de línea de comandos del Sitio para desarrolladores de Apple .

  2. Montar la descarga 1 DMG:

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
  3. Ejecute el instalador a través de la línea de comandos:

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
  4. Cuando termine, desmonte el DMG y elimine la descarga.

    1. Expulsar el DMG 2 .

      cd /
      hdiutil detach /dev/disk3s2
    2. Borra el DMG.

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"

1 En el momento de escribir esto, el DMG descargado y el nombre del paquete son correctos, sin embargo, en el futuro, el nombre puede cambiar. Recuerde modificar el comando (o utilizar el tabulador) para rellenar la parte pertinente del comando.
2 Si el comando no funciona, compruebe que el disco coincide con el nombre del montaje (según mount ).

1 votos

Me gustaría que esto fuera a prueba de futuro, y no quiero tener que proporcionar mi propia copia de la imagen de disco de las herramientas. xcode-select --install descarga e instala las herramientas para el usuario, y no requiere un ADC . Quiero hacer exactamente esto, pero sin la GUI.

1 votos

Los puntos 1 y 2 son muy útiles para la instalación de las herramientas de hardware IO.

12voto

Cosmo Puntos 33

Un intento de limpiar el estilo y la lógica de la respuesta aceptada, haciéndola tan independiente de la versión como sea posible, utilizando softwareupdate a su máxima capacidad e introduciendo una os variable:

#!/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

0 votos

Sólo una nota: el filtro sw_vers no funciona en varias versiones anteriores a la 10.10. (No puedo hablar de 10.11-10.13, sólo he probado hoy en 10.9 10.10 y 10.14) (ver mi respuesta actualizada para algunos ejemplos)

2 votos

Esto supone que la versión de las herramientas de línea de comandos de XCode es la misma que la de MacOS y, al menos en mi sistema (MacOS 12.4, herramientas cliente de XCode 13.4), no es así.

7voto

brysgo Puntos 131

Una alternativa es usar este applescript que escribí:

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 votos

MacOS 10.11 me da el error "osascript no está permitido en el acceso asistido"

6voto

DeProgrammer Puntos 41

He descubierto que si instalas Home Brew, se instalan automáticamente las herramientas de línea de comandos.

He probado esto usando esta imagen vagabunda .

Ejecute el siguiente comando para instalar Homebrew y al hacerlo, instalar las herramientas de línea de comandos.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Sé que la pregunta original sólo preguntaba cómo instalar las herramientas de línea de comandos, pero no conozco ningún mac hoy en día que no tenga también Home Brew instalado.

2 votos

Si miras github.com/Homebrew/install/blob/ verá que Homewbrew utiliza una técnica similar a la descrita en las respuestas (por ejemplo apple.stackexchange.com/a/195963/66169 ) a esta pregunta

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X