如果您在谈论一个特定的第三方应用程序,请使用环境变量。当大多数程序派生并执行新进程时,它们将在整个环境中保持不变。
因此,请使用您可以检查的自定义环境变量启动此应用。例如,为其创建一个别名,例如alias vs=RUNNING_FROM_VSCODE=1 VSCode
,或创建一个包装脚本,如下所示:
#!/bin/sh
export RUNNING_FROM_VSCODE=1
exec VSCode "$@"
然后.bashrc
,您可以
if (($RUNNING_FROM_VSCODE)); then
echo "started from inside VSCode"
# RUNNING_FROM_VSCODE=0 # optional if you only want the immediate child
fi
(( ))
如果表达式的计算结果为非零整数,则bash算术语句为true(这就是我在1
上面使用的原因)。空字符串(对于未设置的环境变量)为false。对于bash布尔变量很不错,但是您可以像使用true
传统POSIX 一样轻松地使用和检查它
if [ "x$RUNNING_FROM_VSCODE" = "xtrue" ]; then
echo "started from inside VSCode"
fi
如果您的应用程序主要清除了其子级环境,但仍然$PATH
保持不变,则可以在包装器中使用它:
#!/bin/sh
export PATH="$PATH:/dev/null/RUNNING_FROM_VSCODE"
exec VSCode "$@"
并使用bash之类的模式匹配[[ "${PATH%RUNNING_FROM_VSCODE}" != "$PATH" ]]
进行检查,以检查是否从PATH中删除后缀会改变它。
当程序正在寻找找不到的外部命令时,这应该无害地进行一次额外的目录查找。 /dev/null
绝对不是任何系统上的目录,因此可以安全地用作伪目录,ENOTDIR
如果PATH搜索在较早的PATH条目中找不到所需的内容,该目录将很快生成。
env
命令。看看是否有我们可以使用的特定于VS的变量。