Ich habe Probleme mit einigen Anwendungen, die die AppleScript- shell script
Funktion verwenden. Beispielsweise zeigen die Deinstallationsskripte von Growl einen Fehler:
error "/bin/sh: rm: command not found" number 127
Die Quelle des Skripts ist
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
Ich habe echo $PATH > /omg.txt &&
den Befehl hinzugefügt, um zu sehen, was der Suchpfad für rm ist. Aber es hat einen seltsamen Wert:
$ cat /omg.txt
â
Was kann ich machen? Ich verstehe nicht, was los ist. sudo /bin/sh
Wenn ich nur im Terminal laufe , ist die Umgebung in Ordnung!
Jetzt weiß ich, dass ich zum Deinstallieren von Growl einfach den Befehl ausführen kann, den es versucht, im Terminal auszuführen. Aber es wird dieses Problem nicht lösen, verschieben Sie es einfach, bis eine andere Anwendung mit demselben Fehler fehlschlägt (es ist schon einmal passiert).
Laut der offiziellen Dokumentation von Apple ist es beabsichtigt, dass Shell-Skripte, die von der do shell script
Aktion von AppleScript aufgerufen werden, die Variable nicht$PATH
von der Umgebung Ihrer Login-Shell erben.
Dementsprechend weist Apple Benutzer an, vollständige Pfade zu Befehlen zu verwenden, wenn Shell-Skripte von AppleScript aufgerufen werden, anstatt sich auf die $PATH-Variable in der Umgebung zu verlassen.
Im Skript in Ihrem Beispiel könnten Sie rm
durch ersetzen/bin/rm
Gemäß der oben verlinkten Dokumentation ist dies das beabsichtigte, dokumentierte Verhalten; Ein Skript, das erwartet, dass die Umgebung $PATH
für Befehle festgelegt wird, do shell script
ist ein Skript mit einem Fehler.
Wenn Sie jedoch unbedingt relative Pfade verwenden und diese mit $PATH vervollständigen müssen, können Sie jedem Shell-Skript, das von aufgerufen wird, do shell script
den Befehl voranstellenPATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin;
hotfix = Geben Sie den Ort des rm
Befehls an:
do shell script "/bin/rm -rf /Library/PreferencePanes/Growl.prefPane ~/Library/PreferencePanes/Growl.prefPane" with administrator privileges
Sie könnten tatsächlich Daniels Vorschlag zum Exportieren von Pfaden verwenden, aber speichern Sie es als Skript für sich selbst (nennen Sie es "dss" für do Shell Skript oder so) und platzieren Sie es in usr/local/bin . Auf diese Weise können Sie das nächste Mal, wenn Sie ein osa- Skript wie die Growl-Deinstallation ausführen müssen , Ihr Skript von der Befehlszeile aus aufrufen, um $PATH zu setzen, den osa- Job auszuführen und dann fertig zu sein. Keine Dauerlösung, aber sehr praktikabel.
do shell script
?
Walja
Daniel