
当我在 Rails 项目上工作时,我想自动化一个场景,我认为屏幕是实现这一点的完美方式,而不必在每次启动后拖放多个窗口(当我不得不触摸鼠标时,这让我很生气)。
理想情况下我会输入:
$ ./bitchin_screen_automation project_name
和
在使用 rails 时我总是会启动一些工具(按此顺序):rails server、spork、autotest,以及对数据库执行的 sql 命令的打印输出。
它通常会以类似于以下的形式结束:
以下 .screen rc 生成了类似的内容,但我无法弄清楚如何自动执行命令以启动每个拆分中的 rails 服务器,也无法向它们传递任何命令。如果我可以将其中一个目录中的目录更改为项目目录,那就太好了。甚至可以将参数传递给 RC 文件吗?我知道 screen 有 -c 命令用于指定不同的 RC 文件,因此这可能是最后的手段,我只会为我的项目编写一个新的,或者编写一个脚本来生成它们。
screen -t home
split -v
focus right
screen -t home
focus left
split
split -v
focus left
screen -t home
总结一下:
1)如何在我的 split 中编写启动命令脚本
2)任何方式将参数传递给 rc 文件(项目目录)
3)额外福利:如果有人能告诉我如何分离并重新连接会话而不会丢失分割数据,那就太好了,我读到过一些文章说这是不可能的,但我相信有人有解决办法 编辑:找到了解决方案,屏幕常见问题解答
答案1
在我看到一些相关的超级用户帖子后,我能够像这样完成(如果有人想在他们的系统上尝试,echos 替换我需要的命令启动):
screen -t home
split -v
focus down
screen bash -c 'echo "rails server"; exec bash -i'
split
focus down
screen bash -c 'echo "spork"; exec bash -i'
split -v
focus down
screen bash -c 'echo "sql output"; exec bash -i'
focus down
screen bash -c 'echo "autotest"; exec bash -i'
加载这个 RC,你会看到以下内容:
答案2
尝试 tmux:
#!/bin/sh
session=${1:-unnamed}
tmux new -d -s "$session" "bash"
tmux split -t "$session" -h "bash"
tmux select-pane -t "$session" -L
tmux split -t "$session" -v "irb"
tmux select-pane -t "$session" -U
tmux split -t "$session" -h "python"
tmux attach -t "$session"
(请参阅手册tmux(1)描述目标窗口和目标窗格接受的值-t
)