Tengo problemas con algunas aplicaciones que utilizan shell script
la función AppleScript. Por ejemplo, los scripts de desinstalación de Growl muestran un error:
error "/bin/sh: rm: command not found" number 127
La fuente del guión es
display dialog (localized string "title")
if button returned of result = "OK" then
try
quit application id "com.Growl.GrowlHelperApp"
end try
try
quit application id "com.Growl.MenuExtra"
end try
do shell script "rm -rf /Library/PreferencePanes/Growl.prefPane ~/Library/PreferencePanes/Growl.prefPane" with administrator privileges
display dialog (localized string "succeeded") buttons {localized string "OK"} default button 1
end if
He agregado echo $PATH > /omg.txt &&
al comando para ver cuál es la ruta de búsqueda de rm. Pero tiene un valor extraño:
$ cat /omg.txt
â
¿Qué puedo hacer? No entiendo lo que está pasando. Cuando acabo de ejecutar sudo /bin/sh
en Terminal, ¡el entorno está bien!
Ahora, sé que para desinstalar Growl solo puedo ejecutar el comando que intenta ejecutar en la Terminal. Pero no resolverá este problema, solo pospóngalo hasta que otra aplicación falle con el mismo error (ocurrió antes).
De acuerdo con la documentación oficial de Apple , es por diseño que los scripts de shell invocados desde la do shell script
acción de AppleScript no heredan la $PATH
variable del entorno de shell de inicio de sesión.
En consecuencia, Apple indica a los usuarios que utilicen rutas completas a los comandos al invocar secuencias de comandos de shell desde AppleScript en lugar de confiar en la variable $PATH del entorno.
En el script de su ejemplo, podría reemplazarlo rm
con/bin/rm
De acuerdo con la documentación mencionada anteriormente, este es el comportamiento previsto y documentado; una secuencia de comandos que espera que el entorno $PATH
esté configurado para do shell script
los comandos es una secuencia de comandos con un error.
Dicho esto, si es absolutamente necesario usar rutas relativas y usar $PATH para completarlas, puede prefijar cualquier script de shell llamado con do shell script
el comandoPATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin;
hotfix = dar la ubicación del rm
comando:
do shell script "/bin/rm -rf /Library/PreferencePanes/Growl.prefPane ~/Library/PreferencePanes/Growl.prefPane" with administrator privileges
En realidad, podría usar la sugerencia de Daniel de exportar rutas, pero guárdelo como un script en sí mismo (llámelo "dss" para hacer script de shell, o algo así) y colóquelo en usr/local/ bin . De esa manera, la próxima vez que necesite ejecutar un script osa como la desinstalación de Growl, puede llamar a su script desde la línea de comando para establecer $PATH, ejecutar el trabajo osa y luego terminar. No es una solución permanente, pero es muy factible.
do shell script
?
valya
Daniel