避免多次采购脚本

Ale*_*lls 2 shell bash terminal shell-script bashrc

目前,当我在 Mac 上打开终端时,它会自动调用:

source ~/.bash_profile.

然而,让我感到困惑的是,我的 shell 似乎没有从~/.bashrc或继承任何内容~/.profile。但这可能是典型的。

我有许多脚本可以使用sourceor继承.;如果我将这些调用放入 中~/.bash_profile,则可能需要一些时间来加载新的 shell 窗口,有时需要 3 或 4 秒,而且时间会变旧。我想有一些方法可以只获取一次这些脚本,并让我的~/.bash_profile文件以某种方式继承它。

请注意,从我的 ~/.bash_profile 调用 source ~/.bashrc 或 source ~/.profile 不是我想要做的,也可能是一个坏主意。这不是我想要做的,因为它没有解决每个新 shell 加载缓慢的问题。

我添加了一些 echo 语句;每次我打开一个新的 bash 终端窗口时,都会记录:

starting to load /etc/profile
finished loading /etc/profile
starting to load bash_profile
finished loading bash_profile
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但令人沮丧的是 - 我真的需要在每次打开新外壳时加载这些吗?为什么它不能做一些花哨的继承,这样我们就不必每次都重新加载所有东西?

我创建了一个视频演示来解决问题。我有 4 个经常使用的终端应用程序:

terminal.app                  # misbehaves
iterm2                        # misbehaves
webstorm terminal emulator    # misbehaves
vscode terminal emulator      # behaves!
Run Code Online (Sandbox Code Playgroud)

VSCode 实际上按照我想要的方式运行。我猜它是通过在父 shell 中加载 ~/.bash_profile 来实现的,并且只在 vscode 启动时执行一次。应用程序中的所有终端窗口都是该父 shell 的子 shell。

希望这个视频能说明问题: https : //www.useloom.com/share/4e62f0cb24434c4a83b8bd32844b596a

这是一个合法的问题 - 大多数终端应用程序都做错了这一切,然而,奇迹般的是,微软的 VSCode 似乎以正确的方式完成了这一切,请看这个问题:

https://youtrack.jetbrains.com/issue/WEB-31390

Hir*_*i_U 5

我想知道在来源方面写陈词滥调会更好,而不是在采购方面。(如 C 头文件)

[[ "${_NAME_OF_THIS_LIBSCRIPT:-""}" == "yes" ]] && return 0
_NAME_OF_THIS_LIBSCRIPT=yes
Run Code Online (Sandbox Code Playgroud)

有了这个,您不需要在每次获取脚本文件时都重复相同的样板文件,脚本文件应该包含要在多个地方共享的内容。或者我错过了什么?老实说,我不是 bash 编程高手,所以我真的很想从其他人那里获得见解。