问题如标题所述。
总而言之,我试图让 bash 脚本和 Vim 在 VS Code 的集成终端中运行时表现不同。
我设法找到了其他几个 Stack Overflow 问题,但它们与操作系统的检测有关:
- 如何检查是否在 Cygwin、Mac 或 Linux 中运行?
- 如何从 Bash 脚本检测操作系统?
通过检查 vscode 终端中的 shell 变量,您可以看到它设置了
TERM_PROGRAM=vscode
。在我的 .bash_profile 中,我有以下内容并且效果很好:
if [ "$TERM_PROGRAM" == "vscode" ]; then
# some stuff
else
# other stuff
fi
你可以检查父进程,直到它匹配或者你发现PID==1
#! /bin/bash
pid=$$
until (( pid == 1 ))
do
[[ $(ps -o command= -p $pid) =~ Code ]] && break
pid=$(ps -o ppid= $pid)
done
(( pid != 1 )) && echo "VS Code"
检查
man ps
以防您有不同的选择
您可以检查
TERM_PROGRAM
环境变量是否设置为vscode
。
初始化此变量的源代码可以在terminalEnvironment.ts中的addTerminalEnvironmentKeys
中找到
here。
您可以在 VS Code 自己的代码库中找到一些特定于 shell 的语法示例,用于检查此环境变量的值,其中它检查变量以确定是否运行其 shell 集成脚本此处以及文档手动运行这些 shell 集成脚本.
我不认为
TERM_PROGRAM
是由任何更广泛的标准定义的。这似乎只是许多终端模拟器按照惯例实现的一个功能。
如果您想检查 VS Code 版本,还有一个
TERM_PROGRAM_VERSION
变量。