/ bin / sh: rm: comando no encontrado

2

Tengo problemas con algunas aplicaciones que usan la función AppleScript shell script . Por ejemplo, los scripts de desinstalación de Growl muestran un error:

error "/bin/sh: rm: command not found" number 127

La fuente del script 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 para 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 solucionará este problema, solo lo pospondrá hasta que otra aplicación falle con el mismo error (sucedió antes).

    
pregunta valya 15.01.2012 - 19:49

3 respuestas

5

Según documentación oficial de Apple , es por diseño que se invocan los scripts de shell de la acción do shell script de AppleScript, no hereda la variable $PATH del entorno de su shell de inicio de sesión.

En consecuencia, Apple les indica a los usuarios que usen rutas completas a los comandos cuando invocan scripts de shell de AppleScript en lugar de confiar en la variable $ PATH del entorno.

En el script de tu ejemplo, puedes reemplazar rm con /bin/rm

De acuerdo con la documentación antes mencionada, este es el comportamiento previsto y documentado; un script que espera que el $PATH del entorno se configure para los comandos do shell script es un script con un error.

Dicho esto, si es absolutamente necesario usar rutas relativas y usar $ PATH para completarlas, puedes prefijar cualquier script de shell llamado por do shell script con el comando PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin;

    
respondido por el Daniel 15.01.2012 - 20:20
1

hotfix = dar la ubicación del comando rm :

do shell script "/bin/rm -rf /Library/PreferencePanes/Growl.prefPane ~/Library/PreferencePanes/Growl.prefPane" with administrator privileges
    
respondido por el olibre 15.01.2012 - 20:21
1

Puede usar la sugerencia de Daniel de exportar rutas, pero guárdelo como un script en sí mismo (llámelo "dss" para hacer un 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 comandos para establecer $ PATH, ejecutar el trabajo osa , y luego ser terminado. No es una solución permanente, pero altamente viable.

    
respondido por el soxman 15.01.2012 - 22:55

Lea otras preguntas en las etiquetas