如何在登录时使用tmux display-message -p且不进入复制模式?
问题分析与解决方案
为什么会出现不同的输出行为?
当你在tmux外部执行tmux attach-session \; display-message -p这类命令时,display-message -p是在tmux服务器进程的上下文里执行的——此时tmux还没完成和当前终端的关联,它的输出会被tmux捕获到内部缓冲区,只能通过复制模式查看。
而当你已经处于tmux会话内部时,display-message -p会直接关联到当前会话绑定的终端(stdout),所以消息能正常打印到终端,不会触发复制模式。日志里的不同伪终端(pts)差异,本质就是命令执行的上下文不同:外部执行时命令输出到tmux内部的pts,内部执行时输出到当前会话绑定的外部终端pts。
解决方法:让启动时的消息直接输出到终端
不需要依赖tmux的display-message,直接用普通的echo就能在tmux启动前把消息打印到当前终端,因为此时你还处于外部终端环境中:
修改后的脚本:
if [ -z "$TMUX" ]; then # 检查是否存在tmux会话 if tmux ls 2>/dev/null 1>/dev/null; then echo "attached to session" tmux attach-session else echo "new session" tmux new-session fi else tmux display-message -p "already in a session" fi
如果一定要通过tmux的命令来输出消息,可以用run-shell指令,它会在会话绑定的终端上下文里执行命令,输出直接到终端:
# 示例:attach时用run-shell输出消息 tmux attach-session \; run-shell 'echo "attached to session"'
内容的提问来源于stack exchange,提问作者Zsh_current_row
相关产品推荐
相关产品推荐

