我可以检查终端是否是由 Visual Studio Code 启动的吗?

Mic*_*lav 5 command-line visual-studio-code

我有一个脚本,每当我打开终端时都会运行它(我将命令放在 .bashrc 中)。现在,当我打开 Visual Studio Code 时,脚本显然也在其中的内部终端中执行。我不希望这种情况发生。有什么方法可以检测终端实例是否由 VSCode 启动,以便在这种情况下阻止脚本执行?(我使用bash)

对不起,如果这是一个愚蠢的问题,我对 Linux 和 bash 还是很陌生。

Dan*_*mms 7

VS CodeTERM_PROGRAM在终端环境中设置标准环境变量以指示启动它的内容,因此您可以使用它解决您的问题,而无需解析进程树:

if [[ "$TERM_PROGRAM" == "vscode" ]]; then
  exit 0
fi

# Rest of script...
Run Code Online (Sandbox Code Playgroud)


Win*_*nix 2

使用这个可能重复的答案:https://askubuntu.com/a/1012277/307523

\n\n
rick@alien:~$ echo $$\n25119\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\nrick@alien:~$ pstree -aps $$\nsystemd,1 splash fastboot kaslr\n  \xe2\x94\x94\xe2\x94\x80lightdm,1026\n      \xe2\x94\x94\xe2\x94\x80lightdm,1294 --session-child 12 19\n          \xe2\x94\x94\xe2\x94\x80upstart,1838 --user\n              \xe2\x94\x94\xe2\x94\x80gnome-terminal-,25109\n                  \xe2\x94\x94\xe2\x94\x80bash,25119\n                      \xe2\x94\x94\xe2\x94\x80pstree,5696 -aps 25119\n
Run Code Online (Sandbox Code Playgroud)\n\n

环境变量$$返回当前正在运行的进程 PID(进程 ID),即 bash 终端。

\n\n

pstree命令显示了所调用命令的整个“树”。

\n

  • 扩展此:`if pstree -s $$ | grep -Eq '\<代码\>'; 然后 echo 从代码开始;菲` (3认同)
  • 我们可以省略 if/then/fi: `pstree -s $$ | grep -wq '代码' && echo true` :) (2认同)