tmux找不到会话:编辑器

问题描述

我正在尝试编写一个脚本,该脚本在一个窗口内设置一系列tmux窗格。每个窗格都将加载一个单独的程序,以模仿IDE。

这是我正在运行的脚本:

#!/bin/sh

tmux new-session -s Editor -n Desktop -d

# Set up main editor window
tmux select-window -t Editor:Desktop

tmux -u attach -t Editor

# Create splits
tmux send-keys -t Editor:Desktop 'C-b %' # 0

tmux send-keys -t Editor:Desktop 'C-b "' # 1
tmux send-keys -t Editor:Desktop 'C-b "' # 2
tmux send-keys -t Editor:Desktop 'C-b "' # 3

# Load programs into panes
tmux select-pane -t 0
tmux send-keys -t Editor:Desktop 'ccb' Enter
tmux send-keys -t Editor:Desktop 'vim' Enter

tmux select-pane -t 1
tmux send-keys -t Editor:Desktop 'ccb' Enter
tmux send-keys -t Editor:Desktop 'working_set --watch .' Enter

tmux select-pane -t 2
tmux send-keys -t Editor:Desktop 'ccb' Enter
tmux send-keys -t Editor:Desktop 'clear' Enter

tmux select-pane -t 3
tmux send-keys -t Editor:Desktop 'ccb' Enter
tmux send-keys -t Editor:Desktop 'npm start' Enter

这不符合预期。相反,它将加载没有窗格的窗口。退出时,我看到错误

can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find session: Editor
can't find pane: 3
can't find session: Editor
can't find session: Editor

解决方法

您应该使用tmux split-window来实现所需的功能。 send-keys发送的键被解释为在命令行中的输入,而不是操作tmux的快捷键。

#!/bin/sh

# Note: the default window,pane index start from 0
# you may need to modify the following index if you changed it in .tmux.conf
# E.g.
# set -g base-index 1 # start window index at 1
# setw -g pane-base-index 1 # pane index starts at 1

tmux has-session -t development

if [ $? != 0  ]; then
  tmux new-session -s Editor -n Desktop -d

  # Set up main editor window
  tmux select-window -t Editor:Desktop


  # Create splits (must executed outside of the session)
  tmux split-window -h -t Editor
  tmux split-window -v -t Editor
  tmux split-window -v -t Editor
  tmux split-window -v -t Editor

  # Load programs into panes
  tmux select-pane -t 0
  tmux send-keys -t Editor:Desktop 'ccb' Enter
  tmux send-keys -t Editor:Desktop 'vim' Enter

  tmux select-pane -t 1
  tmux send-keys -t Editor:Desktop 'ccb' Enter
  tmux send-keys -t Editor:Desktop 'working_set --watch .' Enter

  tmux select-pane -t 2
  tmux send-keys -t Editor:Desktop 'ccb' Enter
  tmux send-keys -t Editor:Desktop 'clear' Enter

  tmux select-pane -t 3
  tmux send-keys -t Editor:Desktop 'ccb' Enter
  tmux send-keys -t Editor:Desktop 'npm start' Enter

fi 

tmux attach -t Editor

参考