
Ja, ich habe als Neuling schreckliche Erfahrungen mit Apple Script gemacht.
Ich muss ein neues Terminalfenster im aktuellen Desktopbereich öffnen. NICHT in einen anderen Bereich verschieben, in dem ein Terminal läuft, und dann ein anderes Terminalfenster öffnen.
Wenn Terminal nicht läuft, sollte natürlich ein neuer Terminalprozess gestartet werden.
Antwort1
tell application "Terminal"
do script " "
activate
end tell
Es scheint seltsam, aber es nutzt eine Besonderheit in der Art und Weise aus, wie Terminal eingehende „do script“-Befehle verarbeitet; es erstellt für jeden Befehl ein neues Fenster. Sie könnten das tatsächlich durch etwas Nützliches ersetzen, wenn Sie möchten; es führt alles aus, was Sie wollen, direkt nach dem Öffnen des neuen Fensters.
Antwort2
Wenn Sie zwischen den Befehlen des Skripts " " keinen Text haben, wird im Terminal keine zusätzliche Eingabeaufforderung angezeigt.
tell application "Terminal"
do script ""
activate
end tell
Antwort3
Mir fallen drei verschiedene Möglichkeiten ein, dies zu tun (die ersten beiden habe ich irgendwo geklaut, aber ich habe vergessen, woher). Ich verwende die dritte, die ein Shell-Skript aus dem Applescript aufruft, weil ich jedes Mal ein neues Fenster öffnen möchte und weil es die kürzeste war.
Im Gegensatz zu dem seit mindestens 10.10 in OS X integrierten Skript öffnen alle diese das Terminal in dem Verzeichnis, das das aktuelle Arbeitsverzeichnis in Ihrem Finder-Fenster ist (d. h. Sie müssen keinen Ordner ausgewählt haben, um ihn zu öffnen).
Enthält außerdem einige Bash-Funktionen, um den Kreis Finder > Terminal > Finder zu vervollständigen.
1. Verwenden Sie eine vorhandene Registerkarte erneut oder erstellen Sie ein neues Terminalfenster:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if (exists window 1) and not busy of window 1 then
do script "cd " & quoted form of myDir in window 1
else
do script "cd " & quoted form of myDir
end if
activate
end tell
2. Verwenden Sie eine vorhandene Registerkarte erneut oder erstellen Sie eine neue Terminal-Registerkarte:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if not (exists window 1) then reopen
activate
if busy of window 1 then
tell application "System Events" to keystroke "t" using command down
end if
do script "cd " & quoted form of myDir in window 1
end tell
3. Erzeugen Sie jedes Mal ein neues Fenster über ein Shell-Skript, das von einem Applescript aufgerufen wird
tell application "Finder"
set myDir to POSIX path of (insertion location as alias)
do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell
4. (BONUS) Bash-Alias zum Öffnen eines neuen Finder-Fensters für das aktuelle Arbeitsverzeichnis in Ihrem Terminal
Fügen Sie diesen Alias zu Ihrem .bash_profile hinzu.
alias f='open -a Finder ./'
5. (BONUS) Wechseln Sie in Ihrem Terminalfenster zum Pfad des vorderen Finder-Fensters
Fügen Sie diese Funktion zu Ihrem .bash_profile hinzu.
cdf() {
target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
if [ "$target" != "" ]; then
cd "$target"; pwd
else
echo 'No Finder window found' >&2
fi
}
Antwort4
Die obigen Antworten funktionieren nur, wenn Terminal bereits ausgeführt wird. Andernfalls werden zwei Terminalfenster gleichzeitig geöffnet - eines wegen do script
und eines wegen activate
.
Dies lässt sich durch ein einfaches if ... else verhindern:
if application "Terminal" is running then
tell application "Terminal"
do script ""
activate
end tell
else
tell application "Terminal"
activate
end tell
end if
Bonus:
Wenn Sie Befehle direkt ausführen möchten, können Sie dies durch Tastenanschläge tun (nicht sehr elegant – ich weiß! Aber es funktioniert)
[...]
else
tell application "Terminal"
activate
tell application "System Events" to keystroke "ls -la"
tell application "System Events" to key code 36
end tell
end if