$PATH in AppleScript und in .bash unterschiedlich ?

Macschrauber

Macschrauber

Aktives Mitglied
Thread Starter
Dabei seit
08.02.2014
Beiträge
13.544
Reaktionspunkte
9.479
Hallo Gemeinde,

El Capitan 10.11.5

ich möchte über do shell script ein Tool aufrufen was in /usr/local/bin/ steckt.

applescript sagt mir command not found

die $PATH Variable die AppleScript nutzt enthält /usr/local/bin/ nicht

display dialog (do shell script "echo $PATH") gibt
"/usr/bin:/bin:/usr/sbin:/sbin"
aus

im Terminal (.bash) habe ich
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

den Pfad drin, mein Tool kann ich in .bash (Terminal.app) von jedem Pfad aus starten.


wie und wo setzte ich $PATH für AppleScript's do shell script

Amen :)

PS: ich kann das umgehen in dem ich do shell script "/usr/local/bin/meintool" schreibe, aber ich würde es gerne wissen
 
Ja, das ist leider wirklich so. Im Terminal werden noch ein paar Skripte ausgeführt, die $PATH erweitern. Aber das passiert nur, wenn Du ein Terminal öffnest. Alle anderen (auch per Spotlight) gestarteten Programme erben $PATH vom init-System launchd. Und dessen $PATH fragst Du so ab:
Code:
$ launchctl getenv PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
Bei Dir sieht das noch anders aus. Ich hab' /usr/local/bin dort hinzugefügt über eine plist-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>th.launchctl.path</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>-c</string>
            <!-- don't know why, but that guy has the same problem:
                 http://stackoverflow.com/questions/26792918/launchd-bash-command-doesnt-run -->
            <string>/bin/sh -c "launchctl setenv PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin"</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>
Kannst ja mal probieren, ob's mittlerweile ohne doppeltes "/bin/sh -c" funktioniert. Unter OS X 10.10 hatte ich das so basteln müssen. Also diese Datei musst Du jedenfalls abspeichern unter /System/Library/LaunchAgents/ und Du nennst sie bspw. "setze.path.plist". Dann musst Du sie noch einmalig laden, ich glaube das ging mit "sudo launchctl load -w /System/Library/LaunchAgents/setze.path.plist".

Alternativ kannst Du anstatt dem plist/launchd-Gefrickel den Pfad auch ganz einfach in /etc/profile ändern, aber ich wollte das lieber nicht in den zentralen Konfigurationsdateien herumspielen. Außerdem lassen sich die plist-Dateien mit launchctl ein- und ausschalten.

edit: Ach ja, du solltest den string hinter label noch anpassen, damit dort der Dateiname steht. Wenn du Dateiname und label nicht synchron hast, könnte es irgendwann schwierig werden, den Überblick zu behalten.
 
  • Gefällt mir
Reaktionen: Macschrauber
Hallo thorstenhirsch

vielen Dank für Deinen Beitrag

launchctl sieht PATH erst mal als leer, müsste man mit dem Inhalt von $PATH setzen, das habe ich gemacht, schaut dann so aus wie bei Dir.

Ich möche eigentlich keine Systemänderungen notwendig machen um das Script laufen zu lassen.

Setze ich halt den Pfad davor

Gerade wollte ich schreiben: Oder setze es in /usr/bin/

aber das verhindert rootless bei 10.11

okay, kann ich mit leben, dachte ich mache einen Denkfehler, aber jetzt weiss ich mehr :)

nebenher noch die Info gefunden: AppleScript nutzt /bin/sh - aber auch wenn ich im Terminal diese Shell benutze und $PATH abfrage habe ich mein /usr/local/bin drin.

Quelle dafür: http://www.macinchem.org/applescript/tutorial2.php
 
je nach dem, wie fett mein script wird, mache ich davor:
Code:
do shell script "PATH=/usr/local/bin:$PATH; ..."
 
  • Gefällt mir
Reaktionen: Macschrauber
Das funktioniert auch, muss aber vor jedem Aufruf neu eingegeben werden.

Ich hab mir beholfen das Tool in einen String zu packen mit dem Pfad davor. So bleibts leserlich.
 
Man könnte genauso gut Set Befehl to "PATH=/usr/local/bin:$PATH; MeinTool" setzen und es wäre dynamisch. Hab ich aber noch nicht ausprobiert, auf Couch gibts kein AppleScript :)
 
Zurück
Oben Unten