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
我不太确定发生了什么......
有人能帮忙解释一下这里tmux
和bash
和发生了什么事的大致意思吗?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-keys
withC-m
将在窗口/窗格中执行命令并将其保存在历史记录中。
答案2
这些命令并不存在于 shell 的历史记录中,仅仅是因为你启动了 shell后运行这些命令。Ctrl-C 不会返回到 shell 中;它会导致pfoo
启动一个新的 (该exec $SHELL
行)。