/ bin / sh: rm: comando non trovato

2

Ho problemi con alcune applicazioni che utilizzano la funzione shell script di AppleScript. Ad esempio, gli script di disinstallazione di Growl mostrano un errore:

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

L'origine dello script è

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

Ho aggiunto echo $PATH > /omg.txt && al comando per vedere qual è il percorso di ricerca per rm. Ma ha un valore strano:

$ cat /omg.txt 
â

Che cosa posso fare? Non capisco cosa sta succedendo. Quando eseguo solo sudo /bin/sh in Terminale, l'ambiente va benissimo!

Ora, so che per disinstallare Growl posso solo eseguire il comando che tenta di eseguire nel terminale. Ma non risolverà questo problema, lo rimanderà solo fino a quando un'altra applicazione fallirà con lo stesso errore (è successo prima).

    
posta valya 15.01.2012 - 19:49
fonte

3 risposte

5

Secondo la documentazione ufficiale di Apple , è designato che gli script di shell richiamati dall'azione do shell script di AppleScript, non eredita la variabile $PATH dall'ambiente della shell di accesso.

Di conseguenza, Apple istruisce gli utenti a utilizzare i percorsi completi per i comandi quando invoca gli script di shell da AppleScript anziché fare affidamento sulla variabile $ PATH nell'ambiente.

Nello script dell'esempio, potresti sostituire rm con /bin/rm

Secondo la documentazione succitata, questo è il comportamento previsto e documentato; uno script che si aspetta che il $PATH dell'ambiente sia impostato per i comandi do shell script è uno script con un bug.

Detto questo, se hai assolutamente bisogno di usare percorsi relativi e usa $ PATH per completarli, puoi fare un prefisso a qualsiasi script di shell chiamato da do shell script con il comando PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin;

    
risposta data 15.01.2012 - 20:20
fonte
1

hotfix = indica il percorso del comando rm :

do shell script "/bin/rm -rf /Library/PreferencePanes/Growl.prefPane ~/Library/PreferencePanes/Growl.prefPane" with administrator privileges
    
risposta data 15.01.2012 - 20:21
fonte
1

Potresti usare il suggerimento di Daniel di esportare percorsi, ma salvarlo come script a sé (chiamalo "dss" per fare script di shell, o qualcosa del genere) e posizionarlo in usr / local / bin . In questo modo la prossima volta che devi eseguire uno script osa come la disinstallazione di Growl, puoi chiamare il tuo script dalla riga di comando per impostare $ PATH, eseguire il lavoro osa , e quindi essere finito. Non una soluzione permanente, ma altamente lavorabile.

    
risposta data 15.01.2012 - 22:55
fonte

Leggi altre domande sui tag