Ich habe versucht herauszufinden, wie ein Bash-Befehl in einem neuen Max OS X Terminal.app-Fenster ausgeführt wird. Als Beispiel würde ich meinen Befehl in einem neuen Bash-Prozess ausführen:
bash -c "my command here"
Dadurch wird jedoch das vorhandene Terminalfenster wiederverwendet, anstatt ein neues zu erstellen. Ich möchte so etwas wie:
Terminal.app -c "my command here"
Aber das funktioniert natürlich nicht. Mir ist der Befehl "open -a Terminal.app" bekannt, aber ich sehe nicht, wie Argumente an das Terminal weitergeleitet werden sollen oder ob ich welche Argumente verwendet habe.
Antworten:
Eine Möglichkeit, wie ich es mir vorstellen kann, besteht darin, eine Befehlsdatei zu erstellen und wie folgt auszuführen:
oder Applescript verwenden:
obwohl Sie entweder viele doppelte Anführungszeichen vermeiden müssen oder keine einfachen Anführungszeichen verwenden können
quelle
osascript -e "tell application \"Terminal\" to do script \"echo '$variable'\"'
; exit
am Ende des Shell-Skripts Befehle hinzu, wie zdo script "echo hello; exit"
. Sie müssen das Fenster noch separat schließen.Teillösung:
Fügen Sie die gewünschten Dinge wie folgt in ein Shell-Skript ein
Und vergessen Sie nicht
chmod +x file
, es ausführbar zu machen. Dann kannst duund es wird in einem neuen Fenster ausgeführt. Fügen Sie
bash
am Ende des Skripts ' ' hinzu, damit die neue Sitzung nicht beendet wird. (Obwohl Sie möglicherweise herausfinden müssen, wie die RC-Dateien und Sachen des Benutzers geladen werden ..)quelle
/Users/{username}
. Gibt es eine Möglichkeit, den Kontextordner mit dem übergeordneten Terminalfenster, in dem er geöffnet wurde, identisch zu halten?Ich habe versucht, dies für eine Weile zu tun. Hier ist ein Skript, das in dasselbe Arbeitsverzeichnis wechselt, den Befehl ausführt und das Terminalfenster schließt.
quelle
tab 1 of window id 7433
stdout in der Start- Shell aus. Um dies zu unterdrücken, platzieren Sie>/dev/null
vor<<END
.Falls es jemanden interessiert, hier ein Äquivalent für iTerm:
quelle
Hier ist noch eine andere Sichtweise (auch mit AppleScript):
Siehe: Codesnippets.joyent.com/posts/show/1516
quelle
Ich habe eine Funktionsversion von Oskars Antwort erstellt. Diese kopiert auch die Umgebung und wechselt in das entsprechende Verzeichnis
Sie können es so verwenden:
oder
quelle
TMP_FILE="tmp.command"
kann ein Problem sein, wenn Sie mehr als einen Prozess gleichzeitig starten. Ich würde vorschlagen, es durchTMP_FILE=$(mktemp "/tmp/command.XXXXXX")
Hier ist mein großartiges Skript, das bei Bedarf ein neues Terminalfenster erstellt und in das Verzeichnis wechselt, in dem sich der Finder befindet, wenn der Finder ganz vorne steht. Es verfügt über alle Maschinen, die Sie zum Ausführen von Befehlen benötigen.
quelle
Ein Kollege fragte mich, wie ich VIELE SSH-Sitzungen gleichzeitig eröffnen könne. Ich habe Cobbals Antwort verwendet, um dieses Skript zu schreiben:
Durch Aktualisieren der Liste der Befehle (es müssen keine SSH-Aufrufe sein) erhalten Sie für jeden ausgeführten Befehl ein zusätzliches geöffnetes Fenster. Das
sleep 60
am Ende ist da, um die.command
Dateien zu behalten, während sie ausgeführt werden. Andernfalls wird die Shell zu schnell abgeschlossen und der Trap ausgeführt, um das temporäre Verzeichnis (erstellt von mktemp) zu löschen, bevor die gestarteten Sitzungen die Möglichkeit haben, die Dateien zu lesen.quelle
Sie können die neue Befehlsfunktion von Terminal auch durch Drücken der
Shift + ⌘ + N
Tastenkombination aufrufen . Der Befehl, den Sie in die Box eingeben, wird in einem neuen Terminalfenster ausgeführt.quelle
Ich nenne dieses Skript trun. Ich schlage vor, es in ein Verzeichnis in Ihrem ausführbaren Pfad zu legen. Stellen Sie sicher, dass es wie folgt ausführbar ist:
Anschließend können Sie Befehle in einem neuen Fenster ausführen, indem Sie einfach trun wie folgt hinzufügen:
Hier ist das Skript. Es macht einige ausgefallene Dinge wie das Übergeben Ihrer Argumente, das Ändern der Titelleiste, das Löschen des Bildschirms, um Unordnung beim Starten der Shell zu beseitigen, und das Entfernen der Datei, wenn dies erledigt ist. Durch die Verwendung einer eindeutigen Datei für jedes neue Fenster können mehrere Fenster gleichzeitig erstellt werden.
quelle
$*
durchgehend zerstört alle nicht trivialen Zitate in der Eingabe. Du willst"$@"
stattdessen.open -b com.apple.terminal
. Danke