有没有办法测试 VS Code 是否正在解析 Ubuntu 上的 shell 环境?

thi*_*ndy 4 ubuntu visual-studio-code

当 VS Code 从“活动”(即通过 UI)启动时,我收到一条错误消息“无法解析您的 shell 环境:生成的 shell 出现意外的退出代码(代码 1,信号为 null)”。发生这种情况是因为我的 rc 文件(zsh,这里不重要)中的最后一个块是:

if command -v tmux &> /dev/null \
   && [ -n "$PS1" ] \
   && [[ ! "$TERM" =~ screen ]] \
   && [[ ! "$TERM" =~ tmux ]] \
   && [ -z "$TMUX" ] \
   && [[ "$TERM_PROGRAM" != "vscode" ]]; then
  exec tmux
fi
Run Code Online (Sandbox Code Playgroud)

我在这里得到了守卫的 tmux 特定部分,在这里得到了代码特定部分。但是,当代码运行此处描述的“运行(或‘解析’)shell 环境的小进程”时,$TERM_PROGRAM似乎并未设置,因此exec tmux仍然运行,因此出现错误。

如何检测环境解析器正在运行?它是否设置了我可以测试的任何其他变量?

编辑:我意识到我可以将环境列出到我的 rc 中的文件中,并且我发现了许多前缀为 的变量VSCODE_,即以下内容:

VSCODE_CODE_CACHE_PATH
VSCODE_CWD
VSCODE_IPC_HOOK
VSCODE_NLS_CONFIG
VSCODE_PID
Run Code Online (Sandbox Code Playgroud)

在这种情况下,对其中任何一个的测试是否可靠?

thi*_*ndy 5

在任一场景(集成终端或环境解析进程)中,检查进程树都是执行此操作的一致且可靠的方法。具体来说,我的.zshrc现在结束如下:

if ... (tmux conditions) \
   && ! pstree -s $$ | grep -wq code; then
  exec tmux
fi
Run Code Online (Sandbox Code Playgroud)