如何让 '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中也不执行它们。即反引号,exec
,open3
,open4
。
如何调用 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,以便安全地重新 运行。
我正在以编程方式更新 bash 文件。在脚本的末尾,我调用了 system("source ~/.bash_profile")
来获取 bash 文件。但是,bash 文件在当前 shell 中没有得到更新。
经过一些研究,我发现 system()
在子 shell 中执行。因此(我认为)当前 shell 没有更新为最新的 bash 文件。
似乎其他调用shell命令的方法在当前shell中也不执行它们。即反引号,exec
,open3
,open4
。
如何调用 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,以便安全地重新 运行。