Necesito obtener un script que mapee las unidades de red según el nombre de usuario de una persona (usamos AD para permitir el acceso). Solía funcionar antes de 10.10.
Tenemos un nuevo laboratorio de Mac que ejecuta 10.12.6. El antiguo guión está debajo.
Instalé jq desde home-brew, pero sigo recibiendo un error cuando intento ejecutarlo. (También debajo)
Lo siento, no tengo experiencia con AppleScript y estoy totalmente perdido.
Cualquier ayuda sería apreciada
# Get Username and Tag Number. Define the URL for the json request.
set user to do shell script "whoami"
set tag to do shell script "hostname -s"
set link to "https://my.gprc.ab.ca/AppService/api/NetworkMappings?UserName=" & user & "&ComputerName=" & tag
# Get the number of disks currently mounted.
set diskLength to length of (list disks)
# Get number of records in the json object.
# Define the first record number in the object.
set recordLength to do shell script "curl " & quoted form of link & " | jq 'length'"
set recordNumber to 0
# For each json record, determine if the object is a drive or printer and mount/install accordingly.
repeat recordLength times
# Define a variable pointing to the first record returned by list disks.
# set diskItem to 1
try
set networkPathVar to do shell script "curl " & quoted form of link & " | jq '.[" & recordNumber & "] | .NetworkPath' | cut -c 2- | sed 's:\\\\\\\\\\\\\\\\://:g' | sed 's:\\\\\\\\:/:g' | sed 's:.$::'"
set deviceType to do shell script "curl " & quoted form of link & " | jq '.[" & recordNumber & "] | .Type'"
on error
return
end try
if deviceType contains "Drive" then
set recordNumber to recordNumber + 1
# Check to see if the drive is already mounted. If not mount it.
# repeat diskLength times
if networkPathVar does not contain items 1 thru diskLength of (list disks) then
mount volume "smb:" & networkPathVar
end if
# end repeat
else
set recordNumber to recordNumber + 1
end if # End of Device Type IF
end repeat
y el error que me sale es?
sh: jq: command not found
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 36 100 36 0 0 495 0 --:--:-- --:--:-- --:--:-- 500
(23) Failed writing body
sh: jq: command not found
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 36 100 36 0 0 495 0 --:--:-- --:--:-- --:--:-- 500
(23) Failed writing body (127)
Probablemente lo instaló jq
en /usr/local/bin
(o en cualquier otro directorio fuera de /bin:/sbin:/usr/bin:/usr/sbin
). Por lo general, este directorio no forma parte, PATH
por lo que debe especificar la ruta completa para ejecutarlo ( /usr/local/bin/jq
).
El problema principal que se señala no es realmente un problema de AppleScript per se. En otras palabras, aunque el do shell script
comando es un comando de AppleScript , el problema es que los comandos llamados por el comando no son comandos de AppleScript , son comandos y, como tales, están sujetos al entorno que se transmite cuando se ejecuta el comando . ejecutado.do shell script
shell
shell
do shell script
El PATH
pasado a un do shell script
comando es /usr/bin:/bin:/usr/sbin:/sbin
, y cualquier ejecutable llamado que no esté dentro de ese PATH
, entonces se debe usar el nombre de ruta completo .
La PATH
variable de entorno es una lista delimitada por dos puntos de directorios en los que su shell busca cuando ingresa un comando .
Al parecer jq
no está dentro de eso PATH
. En otras palabras, jq
no está ubicado en una de las siguientes ubicaciones:/usr/bin:/bin:/usr/sbin:/sbin
Por lo tanto, sus opciones son enlace simbólico o moverse jq
a una de esas ubicaciones, o usar el nombre de ruta completamente calificado del jq
ejecutable en el jq
comando dentro de los comandos del do shell script
comando .
En el do shell script
comando , cambie jq
a/path/to/jq
Ejemplo:/usr/local/bin/jq
Sustituir /usr/local/bin/
con el actual /path/to/
el jq
ejecutable.
Es posible que pueda determinar su ruta en la Terminal usando el siguiente comando :
which jq
En mi sistema el resultado de which jq
es:/usr/local/bin/jq
Si eso no funciona, utilice el siguiente comando en la Terminal :
find / -iname jq 2>/dev/null
Entonces, realmente no necesita entender AppleScript porque el problema es un shell
problema. Comprender cómo funcionan las conchas es donde debe concentrarse en su falta de comprensión.
usuario3439894
PATH
pasado a undo shell script
comando es/usr/bin:/bin:/usr/sbin:/sbin
, y cualquier ejecutable llamado que no esté dentro de esa 'RUTA', se debe usar el nombre de ruta completo . Además, no puedo probar su código , pero la salida a la que se pasa| cut -c 2- | sed 's:\\\\\\\\\\\\\\\\://:g' | sed 's:\\\\\\\\:/:g' | sed 's:.$::'
probablemente podría reemplazarse con un soloawk
comando o, al menos, los tressed
comandos canalizados podrían escribirse como un solosed
comando usando-e command
y no tener que canalizar a dos ocurrencias adicionales desed
.