【问题标题】:Why does my shell script for creating a split-window tmux session not work为什么我的用于创建拆分窗口 tmux 会话的 shell 脚本不起作用
【发布时间】:2021-04-16 15:46:58
【问题描述】:

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

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

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

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

我需要做些什么来更改脚本以获得具有拆分窗口的会话?我已经从this thread 复制了上面的代码,但它对我不起作用。

【问题讨论】:

  • 如果您在 shell 中键入 test 并且您的脚本实际上运行了,那么您没有告诉我们一些事情。 test 应该是一个内置的 shell。您使用什么机制来避免这种情况?
  • 我没有告诉你我的脚本实际上被命名为“testscript”而不是“test”。我编辑了我的帖子。

标签: shell zsh tmux


【解决方案1】:

当您手动运行这些命令时,您将在新会话中运行的 shell 中键入第二行。当您运行脚本时,第二行没有在该会话内执行。试试:

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

【讨论】:

  • 您还需要将-d 选项设置为new-session,以防止立即附加到新会话。
  • 我刚才试过了。这也不起作用。
  • @user9007131 不,那没用。编辑为可行的解决方案。
  • 使用 '-d' 并删除 ':0.0',它确实有效。但是,立即附加有什么问题?我现在在末尾添加了一行“tmux a -t testsession”。
  • @user9007131 如果您立即附加,则拆分窗口命令在您从会话中分离后才会运行。
【解决方案2】:

您获得一个新会话,并且您立即附加到该会话。这会导致对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 选项在技术上采用一个窗口,而不是一个会话,但由于新会话只有一个窗口,它默认为那个窗口。

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

【讨论】:

  • '这会导致对'tmux'的第一次调用被阻塞。'我认为我的心理模型是错误的。新会话创建后,对 tmux 'tmux new-session -s testsession' 的第一次调用不是已经完全执行了吗?我立即附加到它上面?在我的想象中,这意味着第二行 'tmux split-window -v' 然后在新的 tmux 会话中执行 within 因为我已经立即附加到它.
  • tmux 严重超载;它是一个可执行文件,可以根据其参数创建tmux 会话或服务器或客户端。对于new-session,它会创建一个新会话,然后启动一个附加到该会话的客户端;在客户端从会话中分离之前,进程本身不会退出。使用-d,不会创建新客户端;只有一个新会话,允许tmux 进程在创建会话后立即退出。 tmux attach 只是创建一个附加到预先存在的会话的新客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2021-04-20
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多