我知道 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