如何避免tmux在Xonsh Shell中创建无限循环实例?
解决Xonsh中tmux重复创建实例的问题
你的核心问题是每次启动Xonsh时都会重复创建tmux实例,根源在于.xonshrc里直接执行tmux,且后续的xdotool命令逻辑本身存在问题——tmux启动后会挂起Xonsh进程,这些命令要等你退出tmux才会执行,根本达不到预期效果。结合你的需求,给出以下解决方案:
修复思路
只在未处于tmux会话中时才启动tmux,同时用tmux原生命令替代xdotool完成窗口创建和程序启动,避免依赖窗口模拟工具的不可靠性。
修改后的.xonshrc配置
替换原来的tmux及后续xdotool相关代码,改为:
# XONSH WEBCONFIG START $XONSH_COLOR_STYLE = 'rainbow_dash' # XONSH WEBCONFIG END $XONSH_SHOW_TRACEBACK = True $all_proxy="socks5://localhost:9050" $UPDATE_OS_ENVIRON = True # 仅在未处于tmux会话时启动tmux if not $TMUX: # -A: 存在指定会话则附加,不存在则创建 # -s main: 指定会话名为main # -n weechat: 将第一个窗口命名为weechat并启动该程序 tmux new-session -A -s main -n weechat 'weechat'
扩展需求(如果需要多窗口)
如果需要启动tmux时自动创建多个窗口(比如一个weechat窗口+一个普通shell窗口),可以修改为:
if not $TMUX: tmux new-session -A -s main -n weechat 'weechat' \; \ new-window -n shell \; \ select-window -t weechat
这段代码会创建两个窗口,默认选中weechat窗口。
为什么之前取消TMUX变量会更糟?
当你手动取消TMUX环境变量后,每次启动Xonsh都会认为自己不在tmux会话中,因此会反复执行tmux命令创建新实例,自然导致更多重复进程。保留TMUX变量的判断才是正确的检测方式。
内容的提问来源于stack exchange,提问作者Leo_2233
相关产品推荐
相关产品推荐

