我的文件中有一些设置.zshrc
应该在常规终端中运行,但从 IntelliJ 调用终端时却不能运行。
我目前在 Windows 11 上使用 IntelliJ IDEA 2021.3.3 终极版,wsl2 使用的是 2.1.5.0 版本。
基本上,我不想tmux
在 IntelliJ 终端中启动,所以我使用了这个问题。
为了做到这一点,在普通的 Linux 机器上,我向 rc 文件中添加了以下块:
if ps -p $PPID | grep -iq java; then
#config for intelliJ execution
else
#config for regular execution
fi
但是,wsl2 上的问题是两个命令ps -p $PPID
都返回相同的输出,并且ps aux
两个终端上都没有显示任何 java 进程。这是有道理的,因为 IntelliJ 是一个 Windows 进程,而 wsl2 不知道它的存在。
我还知道 IntelliJ 在调用新 shell 时会将变量设置TERMINAL_EMULATOR
为JetBrains-JediTerm
。但是,至少在我的版本中,wsl 的分配并不奏效。
以下是我尝试解决该问题的步骤:
- 我设置了环境变量并在 Windows 设置中更新了 WSLENV=TERMINAL_EMULATOR
- 我可以在 IntelliJ 终端中检索变量的值。问题是该值是系统全局的,因此我打开的任何新终端都会定义该值。
- 在
Tools>Terminal
IntelliJ 设置部分,我尝试将Shell path
值更新为wsl.exe --distribution Ubuntu-22.04 zsh -c "isIntellij=true zsh"
- 这在 bash 中有效(写入时
wsl.exe --distribution Ubuntu-22.04 bash -c "isIntelliJ=true bash"
),但由于某种原因,在 zsh 中不有效。 - 我还尝试了以下组合,结果相同:
zsh -c "export isIntellij=true; zsh"
,,bash -c "export isIntellij=true; zsh"
使用 zsh-i
标志
- 这在 bash 中有效(写入时
还有什么线索我还没探索过吗?另外,应该注意的是,我无法更新 IntelliJ(这是我的永久后备许可证)。
答案1
好的,摸索了一阵子之后,我终于明白了。
基本上,我的第二次尝试是正确的。唯一的警告是:您必须重新启动 intelliJ 才能更新变量的值isIntellij
。
重现步骤 :
将以下代码添加到您的 .zshrc 文件:
if [[ "$isIntelliJ" = "true" ]]; then #config for intelliJ execution else #config for regular execution fi
打开 IntelliJ,进入
Tools>Terminal
设置将值更新
Shell path
为wsl.exe --distribution Ubuntu-22.04 zsh -c "isIntelliJ=true zsh"
重新启动 IntelliJ
更新:似乎你必须对每个现有项目都这样做,否则 IntelliJ 将加载默认的 wsl 路径,这真的很繁琐。如果我找到更明确的解决方案,我会更新,因为据我所知,没有可用于默认终端设置的 xml 文件