Ich habe einen Automator-Dienst geschrieben, der ein kleines Applescript ausführt, um die Lautstärke einzustellen und einen Ton abzuspielen.
Um den Dienst zu aktivieren, habe ich ihn in kopiert /Library/Services
und eine chmod +x
. Um eine Tastenkombination für den Dienst zu registrieren, habe ich ausgeführt, defaults write -g NSUserKeyEquivalents '{"HelloWorld" = "$@~1";}'
wo HelloWorld
der Name des Dienstes ist, wie er im Menü „Dienste“ und in $@~1
meiner Tastenkombination zu sehen ist (was sich in ⌘+⌥+⇧+1 auflöst).
Nach einem Neustart sehe ich den Dienst im Menü mit der Verknüpfung daneben. Wenn ich die gewünschte Tastenkombination drücke, erscheint eine Warnung, die mir mitteilt, dass das Skript auf einen Fehler gestoßen ist. Im Log taucht auch ein Fehler auf:
Fehlende Einschränkungen für erkannt. Es kann nicht platziert werden, da es nicht genügend Beschränkungen gibt, um die Größe und den Ursprung vollständig zu definieren. Fügen Sie die fehlenden Einschränkungen hinzu oder setzen Sie translatesAutoresizingMaskIntoConstraints=YES und Einschränkungen werden für Sie generiert. Wenn diese Ansicht unter macOS 10.12 und höher manuell angelegt wird, können Sie sich dafür entscheiden, [Super-Layout] nicht von Ihrer Außerkraftsetzung aufzurufen. Setzen Sie einen Breakpoint auf DETECTED_MISSING_CONSTRAINTS zum Debuggen. Dieser Fehler wird nur einmal protokolliert.
Dies deutet auf einen Fehler bei einer Ansicht hin, die nicht korrekt initialisiert ist, aber ich verwende keine Ansichten.
Hier ist der Inhalt des Automator-Workflows:
on run
if (get output volume of (get volume settings)) < 50 then
set volume output volume 50
end if
do shell script "afplay /Library/Application\ Support/HelloWorld/hello.mp3"
return
end run
Da es in den Kommentaren angefordert wurde (sorry, dass es so lange gedauert hat), hier ist eine funktionierende Version des Skripts. Der Trick besteht darin, den Dateinamen (der Leerzeichen enthält) in doppelte Anführungszeichen zu setzen, da diese maskiert werden können.
on run
if (get output volume of (get volume settings)) < 50 then
set volume output volume 50
end if
do shell script "afplay \"/Library/Application Support/HelloWorld/hello.mp3\""
return
end run
do shell script
Leerzeichen mit Escapezeichen sind in einem Befehl
vollkommen in Ordnung , Sie müssen nur zwei umgekehrte Schrägstriche verwenden, nicht einen, wenn Leerzeichen in einem do shell script
Befehl mit Escapezeichen versehen sind , z. B. do shell script "afplay /Library/Application\\ Support/HelloWorld/hello.mp3"
würde es gut funktionieren!
Lerk
do shell script
. Ich musste den Dateinamen in doppelte Anführungszeichen setzen (denen Sie entkommen können). Die Fehlermeldung ist massiv irreführend!Benutzer3439894
Lerk
Clemsam lang