Wenn ich ein AppleScript innerhalb eines Bash-Skripts ausführen möchte, könnte ich eine Datei mit der Liste der Befehle aufrufen, die ich ausführen muss.
#!/bin/bash
{some commands}
osascript file.scpt
{other commands}
Was aber, wenn ich Befehle ausführen wollte, die innerhalb von bash nacheinander ausgeführt werden mussten?
Ein Beispiel wäre
#!/bin/bash
echo
echo This will open Google Chrome in Kiosk mode
osascript -e "tell application \"Google Chrome\""
osascript -e "activate"
osascript -e "tell application \"System Events\""
osascript -e "key down {command}"
osascript -e "key down {shift}"
osascript -e "keystroke \"f\""
osascript -e "key up {shift}"
osascript -e "key up {command}"
osascript -e "end tell"
echo "Google Chrome is now open in Kiosk Mode"
Ich weiß, dass dies ein sehr weit hergeholtes Beispiel ist, aber es funktioniert, um zu erklären, was ich versuche zu tun. Normalerweise werden diese Befehle alle ohne die entsprechenden Escape- \
Zeichen an allen Stellen und weniger "
um jeden Befehl herum geschrieben. Ich hätte sie auch in einer .scpt
Akte.
Mir ist bewusst, dass es eine Lösung ist, das Skript mit #!/usr/bin/osascript
anstelle von bash umzuschreiben und von dort aus zu arbeiten, aber ich möchte in der Lage sein, zu mischen. Ich habe festgestellt, dass ich auf eine Skriptdatei testen kann, ob es eine gibt, um einen Befehl zu erstellen und jeden Befehl, den ich benötige, an diese Datei anzuhängen und dann die erforderliche Skriptdatei innerhalb von bash auszuführen.
Auf keinen Fall kann ich auf halbem Weg durch eine Datei die verwendete Shell mit der shebang
Zeile tauschen und dann zurück tauschen, nachdem ich die erforderlichen Befehle ausgeführt habe.
Jede Einsicht wäre mehr als willkommen.
quelle
end tell
Teil des Drehbuchs verpasst .-e
Gibt es einen Grund, warum Sie das im HEREDOC-Beispiel nicht brauchen ?-e statement Enter one line of a script. If -e is given, osascript will not look for a filename in the argument list. Multiple -e options may be given to build up a multi-line script. Because most scripts use characters that are special to many shell programs (for example, AppleScript uses single and double quote marks, ``('', ``)'', and ``*''), the statement will have to be correctly quoted and escaped to get it past the shell intact.
-e statement Enter one line of a script
es ist ein-e
Geschenk. Aber abgesehen davon, wird ein HEREDOC so behandelt, als wäre es eine einzelne Zeile?Sie können das rohe AppleScript in
<<EOD
... einschließen. Das letzteEOD
Signal für das Ende der Eingabe muss an der ersten Position in der Zeile stehen.(BTW, schien Apple ein zu fehlen
end tell
nachactivate
....)quelle