如何让 'system("source ~/.bash_profile")' 与当前 shell 一起工作?

How can I get 'system("source ~/.bash_profile")' to work with current shell?

我正在以编程方式更新 bash 文件。在脚本的末尾,我调用了 system("source ~/.bash_profile") 来获取 bash 文件。但是,bash 文件在当前 shell 中没有得到更新。

经过一些研究,我发现 system() 在子 shell 中执行。因此(我认为)当前 shell 没有更新为最新的 bash 文件。

似乎其他调用shell命令的方法在当前shell中也不执行它们。即反引号,execopen3open4

如何调用 shell 命令来更新当前的 shell,而不打开新的 shell(中断当前的工作流程)?

我正在查看这些命令,包括

source ~/.bash_profile

alias something="echo something"

更新:建议的答案有效。因此,我正在调用 system("kill -SIGUSR1 #{Process.ppid}") 来获取 .bash_profile。请注意,如果您使用的是 Mac,则应将建议的代码放在 .bash_profile 而不是 .bashrc

在你的.bashrc.bash_profile:

sigusr1() {
   source ~/.bash_profile
   echo 'wow! I feel refreshed!'
}

trap sigusr1 SIGUSR1

现在,从您的程序中找出 bash pid(可能只是 getppid())并使用 kill() 将 SIGUSR1 发送给它。

拍错过程你会玩的不亦乐乎!这是建立新联系的一种方式,尤其是对于那些刚刚终止进程的人。

您不能从 shell 的程序 运行 中获取父级 shell 中的脚本。

那个 source 命令或类似的别名,当 运行 直接来自 shell 时,会使更改在当前 shell 中生效。但在那种情况下,您需要仔细编写 profile/rc,以便安全地重新 运行。