gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:40:07 24 4
gpt4 key购买 nike

谁能帮忙解释一下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com