使用 tmux 运行 Bash 脚本来启动一个 4 窗格窗口

使用 tmux 运行 Bash 脚本来启动一个 4 窗格窗口

tmux有人能帮忙解释一下、bash和发生了什么exec吗?我正在尝试设置一个带有 4 个窗格窗口的 tmux 会话。理想情况下,我想在 3 个窗格中运行命令:例如 Ruby Thin 服务器和几个 Ruby 守护程序。这是我目前所拥有的:

~/.bin/tmux-foo

#!/bin/sh

tmux new-session -d -s foo 'exec pfoo "bundle exec thin start"'
tmux rename-window 'Foo'
tmux select-window -t foo:0
tmux split-window -h 'exec pfoo "bundle exec compass watch"'
tmux split-window -v -t 0 'exec pfoo "rake ts:start"'
tmux split-window -v -t 1 'exec pfoo'
tmux -2 attach-session -t foo

~/.bin/pfoo

#!/bin/bash
cd ~/projects/foo
rvm use ree

# here I want to execute command1 2 3 or 4...

exec $SHELL

一切正常……但是当我ctlr-c在运行瘦服务器的第一个窗格中时,它会停止瘦服务器并返回到 shell。但是,命令不在历史记录中;也就是说,如果我按下向上键,我不会得到命令bundle exec thin start……我从我的 bash 历史记录中得到了一些其他命令。我想知道是否有任何方法可以安排这些脚本,以便我得到 bash 历史记录中的命令。

另外...我尝试了exec、和的许多组合exec $SHELL -s ...,但exec $SHELL -s ... -I我不太确定发生了什么......

有人能帮忙解释一下这里tmuxbash和发生了什么事的大致意思吗?exec

答案1

事实证明我想要的是这样的:

tmux splitw -t 'foo':2
tmux send-keys -t 'foo':2 'rvm use ree' C-m
tmux send-keys -t 'foo':2 'bundle exec compass watch

send-keyswithC-m将在窗口/窗格中执行命令并将其保存在历史记录中。

答案2

这些命令并不存在于 shell 的历史记录中,仅仅是因为你启动了 shell运行这些命令。Ctrl-C 不会返回到 shell 中;它会导致pfoo启动一个新的 (该exec $SHELL行)。

相关内容