Come avviare un set di programmi all'interno di tmux o gnome-terminal all'interno di uno script?


32

Volevo lanciare contemporaneamente alcuni comandi in tmux o gnome-terminal o xfterminal, ogni scheda diversa con un singolo comando in esecuzione, e chiudere quella scheda quando termina quel comando.

Anche qualsiasi altro software è il benvenuto

Volevo pubblicare un singolo script per fare il lavoro, ad esempio XX "cmd1" "cmd2" "cmd3"

Risposte:



27

Apri una sessione di tmux e avvia il primo comando. Quindi avviare più comandi su nuove finestre e distribuire uniformemente le dimensioni della finestra alla fine.

tmux \
  new-session  "command1 ; read" \; \
  split-window "command2 ; read" \; \
  split-window "command3 ; read" \; \
  split-window "command4 ; read" \; \
  select-layout even-vertical

Il readdopo ogni comando fa sì che la finestra rimanga aperta al termine del comando in modo da poter leggere l'output.


2
Questa risposta merita più voti. Grazie uomo.
Lester Cheung,

7

Se è sempre la stessa configurazione di programmi, puoi usare uno strumento come teamocil .

Dovrai creare con una configurazione (ad es. ~/.teamocil/sample) Che contenga qualcosa come:

windows:
  - name: my-first-window
    root: ~/Projects/foo-www
    filters:
      before: "rvm use 1.9.2"
      after: "echo 'I am done initializing this split.'"
    splits:
      - cmd: "git status"
      - cmd: "bundle exec rails server --port 4000"
        width: 50
      - cmd:
          - sudo service memcached start
          - sudo service mongodb start
        height: 50

E quindi puoi eseguire: tmux new-session -d "teamocil sample" \; attach


6

Con gnome-terminalesso sarebbe:

gnome-terminal --window -e 'cmd1' --tab -e 'cmd2' --tab -e 'cmd3'

Ogni scheda verrà chiusa al termine del comando.


ottimo anche, ma preferisco tmux questa volta ;-P
margherita
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.