Bash脚本与tmux启动一个4窗口窗口

前端之家收集整理的这篇文章主要介绍了Bash脚本与tmux启动一个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。然而,命令不在历史中;即如果我击中向上键我没有得到包执行瘦命令…我从我的bash历史中得到一些其他命令。我想知道是否有任何方式来安排这些脚本,以便我得到的命令在bash历史。

也…我试过了许多组合的exec,exec $ SHELL -s …和exec $ SHELL -s … -I,我不知道发生了什么…

任何人都可以帮助解释什么是与tmux和bash和exec在这里的一般想法?

正如其他人提到的,在启动$ SHELL之前,您的命令由shell脚本运行;没有一般方式的$ SHELL的实例可以知道它的父运行之前启动它。

要将“初始命令”导入shell历史记录,需要将命令键击直接提供给$ SHELL本身的实例(当然,它已经启动)。在其他情况下,我可能建议使用一个小的Expect程序产生一个$ SHELL的实例,喂它的击键,然后使用交互将tty绑定到期望产生的$ 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
原文链接:https://www.f2er.com/bash/390748.html

猜你在找的Bash相关文章