使用 tmux 的 Bash 脚本来启动一个 4 Pane 的窗口

标签 bash exec tmux

谁能帮忙解释一下 tmuxbashexec 是怎么回事?我正在尝试使用 4 Pane 窗口设置 tmux session 。理想情况下,我想在其中 3 个 Pane 中运行命令:例如一个 Ruby 瘦服务器和几个 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

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

此外...我已经尝试了execexec $SHELL -s ...exec $SHELL -s .. .-我 而且我不太确定发生了什么......

任何人都可以在这里帮助解释 tmuxbashexec 发生了什么的一般想法吗?

最佳答案

正如其他人所提到的,您的命令在 启动您的 $SHELL 之前由 shell 脚本运行; $SHELL 的实例无法知道其父级在启动之前运行了什么。

要将“初始命令”放入 shell 历史记录中,您需要将命令击键直接提供给 $SHELL 本身的实例(当然是在它启动之后)。在其他情况下,我可能建议使用一个小的 Expect 程序来生成 $SHELL 的实例,向它提供击键,然后使用 interact 将 tty 绑定(bind)到 expect-spawned $SHELL.

但是在 tmux 的上下文中,我们可以只使用 send-keys:

#!/bin/sh

tmux 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:0
tmux 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

关于使用 tmux 的 Bash 脚本来启动一个 4 Pane 的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5447278/

相关文章:

git - 与 Bash 的 `true` 命令等效的 Windows 命令 shell 是什么?

linux - Bash - 如何终止脚本并运行下一个脚本

linux - 在 Linux 中导航目录的更快方法?

video - ffmpeg 视频未从 .mp4 转换为 .ts 格式

Python exec() 函数在 2.7 以上版本中损坏?错误: 'name' not defined

Vim 和 Tmux 渲染错误

configuration - 滚动我的 tmux 时自动向下滚动

linux - 从 .bashrc 中键/值对的 .list 文件设置环境变量

java - 无法在java中从mysql导出csv文件

vim - 查找组合键的十六进制代码序列