tmux run-shell 是否支持交互式 shell?

tmux run-shell 是否支持交互式 shell?

我知道 tmux run-shell 可以执行 shell:

$ tmux run-shell "echo start; echo \${var}end"
start
end

但是,如果我希望我的 shell 可以交互工作或读取一些用户输入,该怎么办?

$ tmux run-shell "echo start; read -p \"prompt:\" var; echo \${var}end"
start
end
  • 为什么上面代码中的 read 语句不起作用?
  • 有哪位 tmux 专家可以告诉我如何使用 tmux 实现交互操作吗?

背景:

  • kit.sh我一直把我的各种共同工作集中到一个单一的功能中
  • 这个脚本中有很多互动问题
  • 现在我想kit.sh通过 tmux 热键重用它,就像bind-key i "run-shell \"kit.sh\""在我的 .tmux.conf 中一样
  • 我计划tmux send-keys在其中添加一些kit.sh自动类型功能

更新20231016:

我的问题解决为

bind-key i "new-window \"/path/to/my/kit.sh\""

在 kit.sh 中,我可以交互地读取用户输入。

答案1

tmux run-shell子命令不适用于需要 tty 的程序。这解释了为什么read在交互模式下运行时失败[1]以及为什么

tmux run-shell "echo start; read -p \"prompt:\" var; echo \${var}end"

失败。

正如您已经猜到的,一种方法是使用tmux send-keys[2]。您还可以使用split-window[3]:

tmux split-window "read -p prompt: VAR; echo \$VAR; read -p \"press any key\""

如果您使用的是tmux版本3.2或更高版本,您还可以使用display-popup子命令[2]

tmux display-popup "read -p prompt: VAR; echo \$VAR"

[0]https://github.com/tmux/tmux/issues/3187#issuecomment-1127079855

[1]https://www.gnu.org/software/bash/manual/bash.html#index-read

[2]https://github.com/tmux/tmux/issues/3187

[3]https://github.com/tmux/tmux/issues/3617#issuecomment-1627569000

相关内容