为什么我的 shell 创建 split-window tmux 会话的脚本不起作用

Why does my shell script for creating a split-window tmux session not work

我在 macOS 上使用 zsh。 我创建了一个文件夹 ~/bin/,并将其添加到我的路径中。我创建了一个包含以下代码的 shell 脚本 ~/bin/testscript

#!/bin/sh
tmux new-session -s testsession
tmux split-window -v

并使用 chmod -R 700 ~/bin 设置权限 -rwx------

当通过在 shell 中键入它们来连续执行 shell 脚本中的行时,我得到一个垂直拆分 windows 的新 tmux 会话。这是预期的行为。但是,当我在 shell 中键入 testscript 时,我只会得到一个新的 tmux 会话,但不会垂直拆分 windows.

我需要做什么才能更改脚本以使用拆分 windows 获得会话?我从 this thread 复制了上面的代码,但它对我不起作用。

当您手动 运行 那些命令时,您将在新会话中的 shell 运行ning 中键入第二行。当您 运行 脚本时,第二行不会在该会话中执行。尝试:

tmux new-session -s testsession "$SHELL" \; split-window -v

#!/bin/bash

tmux new-session -d -s testsession
tmux split-window -v -t testsession:0.0
tmux attach-session -t testsession

您获得一个新会话,并且您立即附加到该会话。这会导致对 tmux 的第一次调用被阻塞,直到您从该会话中分离出来,从而阻止脚本在第二次调用 tmux.

之前

为防止出现这种情况,请使用 -d 选项创建新会话而不立即附加到它。使用 split-window 创建第二个窗格后, 然后 您可以附加到会话。

#!/bin/sh
tmux new-session -d -s testsession
tmux split-window -v -t testsession
tmux attach -t testsession

split-window-t 选项在技术上需要一个 window,而不是一个会话,但由于新会话只有一个 window,它默认为那个 window.

tmux attach,没有 -t 选项,将附加到最近使用的会话,因此 -t testsession 在这里可以被认为是可选的。