Pap*_*Bag 10 bash gnome-terminal bashrc
我希望我的 bash 脚本(特别是我的~/.bashrc. 我如何确定是什么情况?有一个变量吗?提前致谢。
Mar*_*ith 11
您可能可以通过返回 shell 的祖先并确定它是由等同于“您”的东西还是其他程序启动来实现的。
获取 shell 的 PID(进程 ID),并从中获取它的 PPID(父进程 ID)。继续向上,直到你找到一些告诉你它来自哪里的东西。您可能需要在您的系统上进行试验——至少,我不知道它是否会通用。
例如,在我的系统上,获取 shell 的 PID 并用于ps显示它是bash:
$ echo $$
18852
$ ps --pid 18852
PID TTY TIME CMD
18852 pts/1 00:00:00 bash
Run Code Online (Sandbox Code Playgroud)
获取 18852 的 PPID:
$ ps -o ppid= -p 18852
18842
Run Code Online (Sandbox Code Playgroud)
找出 PPID (18842) 是什么:
$ ps --pid 18842
PID TTY TIME CMD
18842 ? 00:00:02 gnome-terminal
Run Code Online (Sandbox Code Playgroud)
我们可以看到它是gnome-terminal,即终端模拟器/终端窗口。如果其他程序启动的 shell 没有在终端仿真器窗口中运行,那么这对您来说已经足够了。
如果还不够好,再上一层:
$ ps -o ppid= -p 18842
2313
$ ps --pid 2313
PID TTY TIME CMD
2313 ? 00:00:00 init
Run Code Online (Sandbox Code Playgroud)
这告诉我们gnome-terminal是由init. 我怀疑你的 shell 由另一个程序启动,那里会有不同的东西。
Ser*_*nyy 10
就 Visual Studio Code 而言,显然有一种方法可以为集成终端设置额外的环境变量。因此,设置 Visual Studio 以使用此配置:
"terminal.integrated.env.linux": {
"visual_studio": "true"
}
Run Code Online (Sandbox Code Playgroud)
并且在~/.bashrc:
if [ -n "$visual_studio" ]; then
# do something for Visual Studio
else
# do something else for other types of terminal
fi
Run Code Online (Sandbox Code Playgroud)
通常,您可以依赖于提供给bash流程的环境。例如,该$TERM变量,并运行一个类似的if..then...else...fi分支[ "$TERM" = "xterm" ]或别的东西。在个案的基础上,您可以通过env在每个控制台中运行来调查环境中的差异,将其保存到文件中env > output_console1.txt,以及在评论中甜点的diff output_console1.txt output_console2.txt建议。