1 votos

¿Cómo se puede detectar la disponibilidad de SetFile y GetFileInfo sin causar interacción del usuario? ¿Dónde se instalan las Herramientas de Desarrollo de Línea de Comandos?

En bash, para detectar si un comando COMMAND está disponible, se debe ejecutar la siguiente declaración. (Tenga en cuenta que configuré bash como la shell predeterminada, en lugar de zsh.)

type COMMAND...

Por ejemplo, type detecta que el comando cp está disponible y que el comando foo no está disponible.

$ type cp
cp is /bin/cp

$ type foo
-bash: type: foo: not found

Es importante mencionar que se pueden pasar dos o más comandos a type.

$ type cp foo
cp is /bin/cp
-bash: type: foo: not found

Sin embargo, type es inútil para detectar la verdadera disponibilidad de los comandos SetFile y GetFileInfo, es decir, para detectar si SetFile y GetFileInfo son realmente utilizables.

SetFile y GetFileInfo pertenecen a las Herramientas de Desarrollador de Línea de Comandos para Xcode. macOS 12 Monterey no incluye automáticamente Xcode ni las Herramientas de Desarrollador de Línea de Comandos. Por lo tanto, se supone que SetFile y GetFileInfo no están disponibles si no se instala ni Xcode ni las Herramientas de Desarrollador de Línea de Comandos. Sin embargo, type afirmó que estaban disponibles.

$ type SetFile GetFileInfo
SetFile is /usr/bin/SetFile
GetFileInfo is /usr/bin/GetFileInfo

Luego, ejecuté SetFile y GetFileInfo en Terminal. Sin embargo, macOS indicó que SetFile y GetFileInfo no eran utilizables.

El comando "SetFile" requiere las herramientas de desarrollador de línea de comandos. ¿Le gustaría instalar las herramientas ahora?

El comando "GetFileInfo" requiere las herramientas de desarrollador de línea de comandos. ¿Le gustaría instalar las herramientas ahora?

Estos mensajes de error no se mostraron en Terminal; en su lugar, apareció una ventana de diálogo GUI en el escritorio fuera de Terminal, pidiendo al usuario que haga clic en el botón "Instalar" o "Cancelar".

¿Cómo se puede probar la verdadera disponibilidad de SetFile y GetFileInfo de forma silenciosa sin causar interacción del usuario?

Permítame hacer algunas preguntas más relacionadas con la pregunta anterior. En una ocasión, hice clic en el botón "Instalar" para permitir que se instalaran las Herramientas de Desarrollador de Línea de Comandos (CLDT). Pensé que las Herramientas de Desarrollador de Línea de Comandos (CLDT) se instalarían en "/Applications/Xcode.app". Sin embargo, la instalación de CLDT no creó el directorio "/Applications/Xcode.app" ni lo instaló en él. ¿Dónde se instaló CLDT?

¿Ha cambiado el archivo binario "/usr/bin/SetFile" antes y después de la instalación de CLDT?

Supuse que "/usr/bin/SetFile" dependía de una biblioteca o framework de CLDT. Si este es el caso, ¿dónde se encuentra la biblioteca o framework de CLDT?

0 votos

Usar type, o which, o whence indica correctamente que hay un comando llamado SetFile. Quieres que el sistema operativo te diga si es el que buscas, una definición diferente de "correcto". Eso no es algo que el sistema operativo pueda saber.

0 votos

Tampoco en ninguna parte dice que los binarios llamados SetFile y/o GetFile no deberían estar disponibles solo porque no está instalada la CLT. Al igual que otras partes del sistema, se proporcionan shims para instalar herramientas que falten/sean deseadas.

2voto

Marc Wilson Puntos 146

Si desea saber si está instalada la CLT, un método es buscar el recibo con pkgutil:

$ pkgutil --pkg-info=com.apple.pkg.{CLTools_Executables,CLTools_Base,DeveloperToolsCLI,DeveloperToolsCLILeo} 2>/dev/null | sed -n 's/^version: //p'

Lo que devolverá nulo o la versión instalada, como se muestra aquí.

$ pkgutil --pkg-info=com.apple.pkg.{CLTools_Executables,CLTools_Base,DeveloperToolsCLI,DeveloperToolsCLILeo} 2>/dev/null | sed -n 's/^version: //p'
13.4.0.0.1.1651278267
$ 

Si desea saber la ruta en la que está instalada la CLT, use xcode-select(1).

$ xcode-select -p      
/Library/Developer/CommandLineTools

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