Kombinieren von Variablen in Bash, um einen Befehl zu bilden, der mit dem Befehl osascript an AppleScript gesendet wird

8

Ich versuche, dieses Skript zum Laufen zu bringen. Es ist ein Bash -Skript, das einige Variablen aufnehmen soll, sie zusammensetzen und das Ergebnis zum Senden verwenden soll AppleScript Befehl. Das manuelle Einfügen der Zeichenfolge, die von der Variable to_osa hinter osascript -e zurückgegeben wird, an das Terminal funktioniert so, wie ich es möchte und erwarte es. Aber wenn ich versuche, den Befehl osascript -e und die Zeichenfolge to_osa zu kombinieren, funktioniert es nicht. Wie kann ich das schaffen?

%Vor%

Neben der manuellen Bearbeitung funktioniert das Skript auch, wenn ich den gewünschten Befehl in ein Skript schreibe und dann ausführe:

%Vor%     
Peter Mortensen 06.06.2013, 15:27
quelle

2 Antworten

2

Als allgemeine Regel, setzen Sie keine doppelten Anführungszeichen in die Variable, setzen Sie sie um die Variable herum . In diesem Fall ist es komplizierter, da Sie einige Anführungszeichen für Zitate auf Bash-Ebene und einige für Zitate auf AppleScript-Ebene haben; In diesem Fall werden die Anführungszeichen auf der AppleScript-Ebene in die Variable eingefügt, die Bash-Level-Anführungszeichen um die Variable:

%Vor%

Übrigens, die Verwendung von echo , um solche Dinge zu überprüfen, ist sehr irreführend. echo teilt Ihnen mit, was in der Variablen enthalten ist, und nicht, was beim Referenzieren der Variablen in einer Befehlszeile ausgeführt wird. Der größte Unterschied besteht darin, dass echo die Argumente nach druckt, die durch das Bash-Parsing (Zitat- und Escape-Entfernung usw.) durchgeführt wurden, aber wenn Sie sagen, dass Sie den String manuell einfügen Ich sage, dass es das ist, was Sie vor Parsing wollen. Wenn die Anführungszeichen in der Echo-Zeichenfolge enthalten sind, bedeutet dies, dass bash sie nicht als Anführungszeichen erkennt und sie entfernt. Vergleichen Sie:

%Vor%     
Gordon Davisson 06.06.2013, 16:11
quelle
12

Der ausführbare String-Mapping-Code ist fehleranfällig und bösartig, und das ist absolut nicht nötig. Es ist trivial, Argumente an ein AppleScript zu übergeben, indem man einen expliziten "run" -Handler definiert:

%Vor%

was Sie dann wie folgt aufrufen:

%Vor%

Übrigens, wenn Ihr Skript eine bestimmte Anzahl von Argumenten benötigt, schreiben Sie es auch so:

%Vor%

...

Außerdem können Sie das AppleScript sogar wie jedes andere Shell-Skript direkt ausführen lassen. Fügen Sie zuerst einen Hashbang wie folgt hinzu:

%Vor%

speichern Sie es dann im unkompilierten Nur-Text-Format und führen Sie chmod +x /path/to/myscript aus, um die Datei ausführbar zu machen. Sie können es dann wie folgt von der Shell aus ausführen:

%Vor%

Oder, wenn Sie nicht jedes Mal den vollständigen Pfad angeben möchten, legen Sie die Datei in /usr/local/bin oder ein anderes Verzeichnis, das sich auf dem PATH Ihrer Shell befindet:

%Vor%

...

So sollten Sie Ihr ursprüngliches Skript schreiben:

%Vor%

Schnell, einfach und sehr robust.

-

ps. Wenn Sie eine URL lieber in einem neuen als in einem neuen Fenster öffnen möchten, lesen Sie die Hilfeseite für OS Xs Tool open .

    
foo 07.06.2013 06:11
quelle

Tags und Links