如何确定 wsl2 是否正在从 Windows 中的 IntelliJ 终端运行?

如何确定 wsl2 是否正在从 Windows 中的 IntelliJ 终端运行?

我的文件中有一些设置.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_EMULATORJetBrains-JediTerm。但是,至少在我的版本中,wsl 的分配并不奏效。

以下是我尝试解决该问题的步骤:

  • 我设置了环境变量并在 Windows 设置中更新了 WSLENV=TERMINAL_EMULATOR
    • 我可以在 IntelliJ 终端中检索变量的值。问题是该值是系统全局的,因此我打开的任何新终端都会定义该值。
  • Tools>TerminalIntelliJ 设置部分,我尝试将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标志

还有什么线索我还没探索过吗?另外,应该注意的是,我无法更新 IntelliJ(这是我的永久后备许可证)。

答案1

好的,摸索了一阵子之后,我终于明白了。

基本上,我的第二次尝试是正确的。唯一的警告是:您必须重新启动 intelliJ 才能更新变量的值isIntellij

重现步骤 :

  • 将以下代码添加到您的 .zshrc 文件:

    if [[ "$isIntelliJ" = "true" ]]; then
    #config for intelliJ execution
    else
    #config for regular execution
    fi
    
  • 打开 IntelliJ,进入Tools>Terminal设置

  • 将值更新Shell pathwsl.exe --distribution Ubuntu-22.04 zsh -c "isIntelliJ=true zsh"

  • 重新启动 IntelliJ

更新:似乎你必须对每个现有项目都这样做,否则 IntelliJ 将加载默认的 wsl 路径,这真的很繁琐。如果我找到更明确的解决方案,我会更新,因为据我所知,没有可用于默认终端设置的 xml 文件

相关内容