2017-10-11 49 views
1

因此,我遇到了一些我无法解释的非常奇怪的行为。我最近跳上了tmux的潮流,并设置了我的shell配置,以便在打开终端窗口时自动启动tmux。大约在同一时间,我开始了一个bug,在那里打开一个新的终端会话会正确启动TMUX但随后显示:.zshrc未在Intellij中加载的tmux中找到

zsh-newuser-install: startup files exist, aborting. 

Use the argument -f if you want to force the function to be run again. 
[email protected] /home/douglasparker% 

现在我有一个很深入的配置,用我自己的PS1它显然是不使用。不过,我可以通过简单地运行解决这个问题:

[email protected] /home/douglasparker% source ~/.zshrc 
[email protected] (~) 
[17-10-11 11:35:59]$ 

所以,简单地采购的zsh的运行配置修复它和负载的一切应该,这是没有意义的应该会自动运行,但仅仅是不。

我也发现这只发生在第一个tmux会话从嵌入Intellij的终端启动。如果我正常打开终端(或者甚至在Android Studio中),它会正常工作,并自动发出~/.zshrc。然而,从Intellij开放具体产生这个错误。有趣的部分是,如果Intellij首先打开,则任何后续打开tmux的终端都将显示相同的问题。但是,如果我先打开另一个终端并将其打开,那么在Intellij中启动终端就能正常工作。

“首先”我的意思是没有现有的tmux服务器。如果我关闭退出所有打开tmux窗口(如tmux ls产生“无法连接到服务器”),那么如果我打开的下一个会话来自通用终端,那么我很好,并将继续,直到全部 tmux窗口再次关闭。但是,如果第一个 tmux窗口来自Intellij,那么这个bug会继续,并且将继续为所有终端,直到我再次退出所有tmux窗口。

最低配置重现此我发现如下~/.zshrc文件:

#!/bin/bash 

# If this is a raw terminal, just open tmux and then exit 
# The inner session will re-source this script and load the configuration 
if ! { [ "${TERM}" = "screen" ] && [ -n "${TMUX}" ]; } then 
    # Open tmux immediately 
    echo "Sourced ~/.zshrc: Not in tmux" >> tmux.log 
    tmux 
    exit 
else 
    # Must already be within tmux 
    echo "Sourced ~/.zshrc: In tmux" >> tmux.log 
    echo hello 
fi 

这样做只是检查它是否是TMUX内。如果没有,那么它会打开tmux,并在tmux停止后退出。在内打开一个会话应该第二次来源脚本,并打印hello到tmux中的控制台。

如果没有TMUX会议开着,我推出一个正常的终端窗口(如果有从一个正常的终端窗口现有TMUX会话和我启动在的IntelliJ终端),然后我得到预期的输出:

hello 
[email protected] ~% cat tmux.log 
Sourced ~/.zshrc: Not in tmux 
Sourced ~/.zshrc: In tmux 
[email protected] ~% 

如果没有TMUX会议公开,我推出的IntelliJ内一个终端窗口,然后我得到的输出:

zsh-newuser-install: startup files exist, aborting. 

Use the argument -f if you want to force the function to be run again. 
[email protected] /home/douglasparker% cat tmux.log 
Sourced ~/.zshrc: Not in tmux 
[email protected] /home/douglasparker% 

这是所有印刷的IntelliJ一个TMUX会话中。所以它正确地采购了~/.zshrc文件一次并启动tmux,但它只是做而不是来源~/.zshrc在tmux内第二次在这些非常具体的条件下,我不知道为什么。

我也尝试改变我的shell临时打击,发现问题确实不是在bash上重现。所以这个问题似乎来自于zsh,tmux和Intellij之间的整合。

我意识到这是一个令人难以置信的具体问题,但是有人知道可能会导致这种问题吗?查找zsh错误并没有帮助我找到原因。 Intellij是否有特殊的终端窗口可能会导致此行为?有没有任何记录的原因,为什么zsh会拒绝来源~/.zshrc

+1

请参阅https://youtrack.jetbrains.com/issue/IDEA-165272。 – CrazyCoder

+0

取消选中“壳集成”修复了它。那究竟做什么呢?我无法找到此设置所做的任何解释。 –

+0

请参阅https://www.jetbrains.com/help/idea/terminal.html获取Shell集成选项的说明:如果选择此选项,终端会首先加载自定义rc配置文件(位于终端文件夹下的插件IntelliJ IDEA发行版),它提供了一个额外的设置,然后是用户的rc文件。请注意,目前shell集成适用于Bash/sh(bashrc),zsh(zshrc)和fish shell(config.fish)。 – CrazyCoder

回答

2

根据https://youtrack.jetbrains.com/issue/IDEA-165272,在Intellij中,取消选中设置>工具>终端>壳集成为我解决了这个问题。

我不知道该设置实际上做了什么,并且无法找到任何文档,但禁用它可以解决问题。

谢谢CrazyCoder,你是救命恩人!

+0

从[官方文档](https://www.jetbrains.com/help/idea/terminal.html)中,它提供了一种将项目本地'* rc'文件传递到shell的方法:_如果选择此选项,终端首先加载一个定制的** rc **配置文件(位于IntelliJ IDEA发行版的**插件**下的**终端**文件夹中),该文件提供了一个额外的设置,然后用户的** rc * * file._ – Brice

+0

这是一个很奇怪的。解决了我的问题。 'zsh-newuser-install:启动文件存在,正在中止。 如果要强制该功能再次运行,请使用参数-f。 “这更奇怪了。但无论如何,这固定所有的痛苦的东西。 –

相关问题