Bash scripts with tmux to launch a 4-paned window Bash scripts with tmux to launch a 4-paned window bash bash

Bash scripts with tmux to launch a 4-paned window


As others have mentioned, your commands are being run by the shell script before launching your $SHELL; there is no general way the instance of $SHELL can know what its parent ran before starting it.

To get the “initial command” into the shell history, you need to feed the command keystrokes directly to the instance of $SHELL itself (after it has been started, of course). In other contexts I might suggest using a small Expect program to spawn an instance of $SHELL, feed it the keystrokes, then use interact to tie the tty to the expect-spawned $SHELL.

But in the context of tmux, we can just use send-keys:

#!/bin/shtmux new-session -d -s foo 'exec pfoo'tmux send-keys 'bundle exec thin start' 'C-m'tmux rename-window 'Foo'tmux select-window -t foo:0tmux split-window -h 'exec pfoo'tmux send-keys 'bundle exec compass watch' 'C-m'tmux split-window -v -t 0 'exec pfoo'tmux send-keys 'rake ts:start' 'C-m'tmux split-window -v -t 1 'exec pfoo'tmux -2 attach-session -t foo


tmuxinator lets you specify this with a nice yaml file. For your case you could have:

# ~/.tmuxinator/foo.yml# you can make as many tabs as you wish...project_name: fooproject_root: ~/projects/foorvm: reetabs:  - main:      layout: tiled      panes:        - bundle exec thin start        - bundle exec compass watch        - #empty, will just run plain bash        - rake ts:start

You can of course have extra windows etc.


Place the following into the command prompt [all as one line], it will open 4 tmux panels automatically (I know this wasn't the question, but this looks somewhat easier than what I saw posted):

    tmux new-session \; \split-window -v \; \split-window -h \; \select-pane -t 0 \; \split-window -h

Now you can take that command and use it with whatever scripting language you like [you need to double the escape characters {backslash characters} if using perl...and probably other languages].

This runs the subsequent command in the newer tmux panel, reverting to the first and splitting it at the end.