41

I wanted to launch a few commands simultaneously in tmux or gnome-terminal or xfterminal , every different tab with a single command running , and close that tab when that command finishes.

Any other software is welcomed as well

I wanted to issue a single script to do the job , e.g XX "cmd1" "cmd2" "cmd3"

4 Answers 4

49

Open a tmux session and start the first command. Then launch more commands on new windows and evenly distribute the window sizes at the end.

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

The read after each command causes the window to stay open after the command has finished so that you can read the output.

3
  • 3
    This answer deserves more votes. Thanks man. Commented Jun 2, 2017 at 6:16
  • How would you keep the windows opened after the commands are done? Commented Mar 26, 2021 at 4:16
  • @MasterScrat: the read that danijar put after each command will keep the window open until you type a return. Alternatively, you can replace the read by: a. cat > /dev/null if you fear typing return by error (the cat will require a Ctrl-D); b. bash (or your preferred shell) if you want to do some manual housekeeping after the command (ls -l to see if your command generated the expected output file, and so on) Commented Oct 5, 2022 at 8:50
29
tmux new -d -s my-session 'echo window-1 pane-1; sleep 8' \; \
          split-window -d 'echo window-1 pane-2; sleep 6' \; down-pane \; \
            new-window -d 'echo window-2;        sleep 4' \; next-window \; \
                attach \;

The above is a running example of the general idea ... more here: How to run streamripper and mplayer in a split-screen X terminal, via a single script

8

If it's always the same configuration of programs, you can use a tool like teamocil.

You'll need to create with a configuration (e.g. ~/.teamocil/sample), which contains something like:

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

And then you can run: tmux new-session -d "teamocil sample" \; attach

6

With gnome-terminal it would be:

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

Each tab will be closed after its command is finished.

1
  • great as well , but i do prefer tmux this time ;-P
    – daisy
    Commented Oct 16, 2011 at 10:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .