PyCharm通过SSH远程调试tcsh服务器时出现"/: Event not found"错误
Fixing "/: Event not found" When Remote Debugging with PyCharm on tcsh Servers
我之前也碰到过一模一样的诡异问题!你猜的完全没错——这就是tcsh的历史事件替换功能在搞鬼。tcsh会把!字符默认当作调用历史命令的标记,而PyCharm生成的调试命令里刚好带了!/path/to/...这种路径格式,直接触发了这个机制,导致调试莫名其妙中断。
下面是几个亲测有效的解决方案:
方案1:强制PyCharm用bash执行调试命令
既然tcsh的特性是根源,那我们直接换个shell避开它:
- 打开PyCharm的
Settings/Preferences(Windows/Linux按Ctrl+Alt+S,Mac按Cmd+,) - 找到
Build, Execution, Deployment > Deployment,选中你的远程服务器配置 - 切换到
Connection标签页,把Shell path从默认的/bin/tcsh改成/bin/bash(绝大多数Linux服务器都预装了bash) - 保存配置后重启调试,这个问题基本就能彻底解决
方案2:临时禁用tcsh的历史替换(如果必须用tcsh)
要是你因为环境限制不能换shell,可以临时关掉tcsh的历史替换功能:
- 在远程服务器的tcsh终端里执行命令:
set noglob - 这个命令会禁用包括历史事件替换在内的通配符扩展,之后再启动PyCharm调试会话,就不会触发
/: Event not found错误了 - 要是想永久生效,把
set noglob添加到你的~/.tcshrc配置文件里就行
方案3:微调PyCharm调试配置(进阶)
偶尔PyCharm生成的命令格式也会触发tcsh的敏感解析,你可以手动调整:
- 打开
Run/Debug Configurations,找到你的远程调试配置 - 在
Configuration标签页里,确保Script path用的是完整绝对路径,尽量避免路径里出现特殊字符 - 还可以在
Environment variables里新增SHELL=/bin/bash,强制让调试进程用bash执行
至于问题时好时坏的诡异现象,大概率是tcsh的历史缓存偶尔没匹配到对应事件,所以没触发错误,但本质还是历史替换的锅,上面的方案应该能彻底解决。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

