Ich habe ein Bash-Skript imagecopy.sh
, das Images, die sich in einem Unterverzeichnis befinden, mit einer vorangestellten Datumszeichenfolge sichert. Dies funktioniert einwandfrei, wenn ich es aus dem Verzeichnis ausführe, in dem es sich befindet /Users/danny/Library/Caches/
.
Das Drehbuch ist
#!/usr/bin/env bash
cat himawaripy/latest.png > himawaripy/output/$(date "+%Y.%m.%d-%H.%M.%S").png
Ich habe auch das Verzeichnis, in dem sich das Skript befindet, zu meiner $PATH
Verwendung hinzugefügt nano .profile
und diese Verwendung bestätigt echo $PATH
.
/Users/danny/Library/Caches:/Users/danny/anaconda/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/TeX/texbin
Ich möchte das Bash-Skript regelmäßig mit einem LaunchAgent ausführen, der sich in befindet /Users/danny/Library/LaunchAgents
.
Die LaunchAgent-Datei com.user.imagecopier.plist
verweist durch die Zeilen auf den Skriptspeicherort.
..other code
<key>Program</key>
<string>imagecopy.sh</string>
...etc
Ich gehe davon aus, dass ein Fehler beim Verknüpfen der LaunchAgent-Datei mit dem Skript vorliegt. Vorschläge sind sehr willkommen.
Bearbeiten: LaunchAgent-Datei wie vorgeschlagen aktualisiert
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.imagecopier</string>
<key>ProgramArguments</key>
<array>
<string>/Users/danny/Library/Caches/imagecopy.sh</string>
</array>
<key>Nicer</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
cat
Dateien? Verwenden Sie den SchlüsselProgramArguments
mit dem absoluten Pfad zum Skript. Und die absoluten Pfade zur Quell- und Zieldatei in Ihrem Skript.cat
ing eine Datei auf ein anderes Aussehen irgendwie seltsam, nur verwendencp
(wenn Sie die Quelldatei behalten möchten) odermv
(wenn Sie es umbenennen möchten).<key>ProgramArguments</key>
hier?Antworten:
Bereinigen Sie die Datei .profile / .bash_profile und entfernen Sie den Teil / Users / danny / Library / Caches:!
Erstellen Sie einen bin-Ordner in Ihrem Benutzerordner und fügen Sie ein Skript mit dem Namen imagecopy.sh ein . Der Inhalt des Skripts ist:
Erstellen Sie einen geeigneten Ausgabeordner. Im obigen Beispiel verwende ich ~ / Documents / output.
Erstellen Sie die Datei /Users/danny/Library/LaunchAgents/com.user.imagecopier.plist mit dem Inhalt:
In der Datei /tmp/com.user.imagecopier.stderr wird ein Fehler angezeigt (z. B. wenn der Ausgabeordner fehlt oder keine Datei latest.png verfügbar ist).
Laden Sie die Datei mit:
Wenn der Startagent ordnungsgemäß funktioniert, können Sie das Teil entfernen
von der plist.
quelle