.zshrc不是在Intellij

时间:2017-10-11 19:07:39

标签: intellij-idea zsh tmux

所以我遇到了一些我无法解释的非常奇怪的行为。我最近跳上了tmux的潮流并设置了我的shell配置,以便在打开终端窗口时自动启动tmux。大约在同一时间,我开始得到一个错误,打开一个新的终端会话将正确启动tmux然后显示:

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

Use the argument -f if you want to force the function to be run again.
douglasparker@gryphon /home/douglasparker% 

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

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

因此,简单地采购zsh的运行配置可以修复它并加载它应该包含的所有内容,这没有任何意义,因为它应该自动获取但是不是。

我还发现只有在第一个tmux会话从Intellij 中嵌入的终端启动时才会发生这种情况。如果我正常打开终端(甚至在Android Studio中),它可以正常工作并自动提供~/.zshrc。但是从Intellij开放特别产生了这个bug。有趣的是,如果Intellij首先打开,那么打开tmux的任何后续终端都会显示相同的问题。但是,如果我先打开另一个终端并保持打开状态,那么在Intellij中启动终端可以正常工作。

首先"首先"我的意思是没有现有的tmux服务器。如果我关闭退出所有打开的tmux窗口(这样tmux ls产生"无法连接到服务器"),那么如果我打开的下一个会话来自通用终端,那我就没事了并将一直持续到所有 tmux窗口再次关闭。但是,如果第一个 tmux窗口来自Intellij,则此错误将显示并将继续所有终端,直到我再次退出所有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停止后退出。在中打开一个会话应第二次来源此脚本,并在tmux中将hello打印到控制台。

如果没有tmux会话打开,我启动一个正常的终端窗口(如果正常终端窗口中的现有tmux会话,并且我在Intellij中启动了一个终端)那么我得到了预期产出:

hello
douglasparker@gryphon ~% cat tmux.log
Sourced ~/.zshrc: Not in tmux
Sourced ~/.zshrc: In tmux
douglasparker@gryphon ~% 

如果没有打开tmux会话,我在Intellij中启动终端窗口,那么我得到输出:

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

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

这都是在Intellij的tmux会话中打印的。所以它正确地获取~/.zshrc文件一次并启动tmux,但它只是在tmux下第二次而不是~/.zshrc具体情况,我不明白为什么。

我还尝试将我的shell暂时改为bash,发现问题确实没有在bash上重现。所以这个问题似乎来自zsh,tmux和Intellij之间的集成。

我意识到这是一个非常具体的问题,但是有谁知道可能导致这类问题的原因是什么?查找zsh错误并没有真正帮助我找到原因。 Intellij是否有一些特殊的终端窗口可能导致这种行为?是否有任何记录在案的原因,为什么zsh拒绝提供~/.zshrc

1 个答案:

答案 0 :(得分:12)

基于https://youtrack.jetbrains.com/issue/IDEA-165272,在Intellij中,取消选中设置>工具>终端> Shell Integration为我解决了这个问题。

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

谢谢CrazyCoder,你是一个救生员!