Eine Aktion, mehrere Terminalfenster mit laufenden Prozessen

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Viele Entwicklungsumgebungen erfordern das Ausführen von Dingen in einem Terminalfenster. npm run start oder was auch immer. Ich weiß, dass mein größtes Projekt erfordert, dass ich eine große, schicke Docker-basierte Sache in einem Terminal, Ruby on Rails in einem anderen und Webpack in einem dritten laufen lasse. Ich habe auch an anderen Projekten gearbeitet, die mehrere Terminalfenster erfordern, und ich habe nicht das Gefühl, dass ich da besonders bin. Ich habe von mehreren anderen in dieser Situation gehört. Es ist keine *schlechte* Situation, sie ist nur etwas umständlich und nervig. Ich muss mich an alle Befehle erinnern und meine Befehlszeilenanwendung so einrichten, dass sie sich für mich angenehm anfühlt. Für mich sind geteilte Fenster besser als Tabs, obwohl Tabs für separate Projekte in Ordnung zu sein scheinen.

Ich habe die Frage natürlich auf Twitter gestellt. Ich dachte, ich sammle hier die Optionen.

  • tmux war die beliebteste Antwort. Ich bin mir sehr sicher, dass ich nicht alles verstehe, was es kann, aber ich glaube zu verstehen, dass es "gefälschte" Bereiche innerhalb einer Terminalsitzung erstellt, die mehrere Bereiche emulieren. Diese mehreren Bereiche können also so konfiguriert werden, dass sie gleichzeitig unterschiedliche Befehle öffnen und ausführen. Das fand ich interessant, weil es buchstäblich Tage nachdem unser CodePen-Mitgründer uns allen mitgeteilt hatte, dass die neue Entwicklungsumgebung, an der er arbeitet, tmux verwenden wird, geschah.
  • Ich wurde von einem Kerl auf kitty aufmerksam gemacht, der mir sagte, dass es sich für ihn wie ein erwachsenes tmux anfühlt. Es kann in Layouts mit Befehlen konfiguriert werden, die beim Start ausgeführt werden.
  • Es gibt native Apps für alle Plattformen, die mehrere Bereiche ausführen können.
    • macOS: Ich benutze schon lange iTerm, das geteilte Bereiche gut beherrscht. Es kann auch Fensteranordnungen speichern, was ich genutzt habe, aber ich sehe keine eingebaute Option, um Befehle in dieser Anordnung auszulösen. Das native Terminal kann auch Tabs und Teilungen, fühlt sich aber sehr eingeschränkt an.
    • Linux: Terminator
    • Windows: Das Standardterminal hat Bereiche.
  • Es gibt npm-Tools zum Ausführen mehrerer Skripte, wie z. B. concurrently und npm-run-all, aber (glaube ich?) sie sind darauf beschränkt, nur npm-Skripte auszuführen, anstatt beliebige Terminalbefehle. Vielleicht kann man dafür npm-Skripte für diese anderen Befehle erstellen? Aber selbst dann glaube ich nicht, dass man die Ausgabe in verschiedenen Bereichen sehen würde, daher ist es wahrscheinlich am besten für Skripte, die einmal ausgeführt und dann beendet werden, anstatt dauerhaft zu laufen.

Da ich ein Mac-Nutzer bin, interessierten mich am meisten Lösungen, die mit iTerm funktionieren, da ich es sowieso schon benutze. Mangels einer integrierten iTerm-Lösung habe ich erfahren, dass es "skriptfähig" ist. Anscheinend stellen sie die Unterstützung für AppleScript zugunsten von Python ein, aber hey, vorerst scheint es gut zu funktionieren.

Es ist im Grunde das hier

Der Code
tell application "iTerm"
	
  tell current window
		
    create window with default profile
    tell current session of current tab
      set name to "run.sh"
      write text "cd '/Users/chriscoyier/GitHub/CPOR'"
      write text "./run.sh"
    end tell
		
    create tab with default profile
    tell current session of current tab
      set name to "Rails"
      write text "cd '/Users/chriscoyier/GitHub/CPOR'"
      write text "nvm use"
      write text "yarn"
      write text "bundle install"
      write text "yarn run rails"
    end tell
		
    create tab with default profile
    tell current session of current tab
      set name to "webpack"
      write text "cd '/Users/chriscoyier/GitHub/CPOR'"
      write text "nvm use"
      write text "yarn"
      write text "yarn run dev"
    end tell
		
    # split vertically
    # tell application "System Events" to keystroke "d" using command down
    # delay 1
		
    # split horizontally
    # tell application "System Events" to keystroke "d" using {shift down, command down}
    # delay 1
		
    # moving... (requires permission)
    # tell application "System Events" to keystroke "]" using command down
		
    end tell
	
end tell

Ich öffne einfach dieses Skript, drücke auf Ausführen und es erledigt die Arbeit. Ich habe die Kommentare drin gelassen, weil ich herausfinden möchte, wie ich es so einrichten kann, dass es im Split-Screen-Modus funktioniert, wie ich es mag, anstatt in Tabs, aber ich habe das zum Laufen gebracht und wurde dann wieder faul. Es fühlte sich seltsam an, Tastenkombinationen verwenden zu müssen, um es zu erledigen. Daher dachte ich, wenn ich mich schon damit beschäftige, würde ich herausfinden, ob ihre neueren Python-Sachen es direkter unterstützen oder was. Es ist auch lustig, dass ich es nicht in eine kleine Mini-App oder so etwas kompilieren kann. Kann Automator das nicht tun? Schulterzucken.

Die andere beliebte Antwort, die ich für Mac-Nutzer bekam, ist, dass sie Alfred die Arbeit machen lassen. Ich habe mich nie mit Alfred beschäftigt, aber es gibt eindeutig fancy stuff, das man damit machen kann.