我有一个脚本,每当我打开终端时它都会运行(我将命令放在 .bashrc 中)。现在,当我打开 Visual Studio Code 时,该脚本显然也会在其中的内部终端中执行。我不希望这种情况发生。有没有办法检测终端实例是否由 VSCode 启动,以便我可以在这种情况下阻止脚本执行?(我使用 bash)
抱歉,如果这是一个愚蠢的问题,我对 Linux 和 bash 还很陌生。
答案1
TERM_PROGRAM
VS Code在终端环境中设置标准环境变量来指示启动它的内容,因此您可以使用它来解决问题,而无需解析进程树:
if [[ "$TERM_PROGRAM" == "vscode" ]]; then
exit 0
fi
# Rest of script...
此规则的一个例外是,如果扩展程序创建了终端并指定了很少使用的strictEnv
标志。这些是扩展程序表示它希望完全控制环境的 shell。
答案2
使用这个可能重复的答案:https://askubuntu.com/a/1012277/307523
rick@alien:~$ echo $$
25119
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~$ pstree -aps $$
systemd,1 splash fastboot kaslr
└─lightdm,1026
└─lightdm,1294 --session-child 12 19
└─upstart,1838 --user
└─gnome-terminal-,25109
└─bash,25119
└─pstree,5696 -aps 25119
环境变量$$
返回当前正在运行的进程 PID(进程 ID),即 bash 终端。
该pstree
命令显示所调用的整个命令“树”。