我正在以编程方式更新bash文件。在脚本的最后,我打电话system("source ~/.bash_profile")
来源bash文件。但是,bash文件在当前shell中未得到更新。如何获取'system(“source〜/ .bash_profile”)'以使用当前shell?
经过一番研究,我发现system()
子shell中执行。因此(我认为)当前shell不会更新最新的bash文件。
看来,调用shell命令的其他方法也不会在当前shell中执行它们。即反引号,exec
,open3
,open4
。
如何调用一个shell命令,将更新当前的shell,而不打开一个新的外壳(打破目前的工作流程)?
我在看这些命令包括
source ~/.bash_profile
或
更新:建议的答复工作。因此,我要求system("kill -SIGUSR1 #{Process.ppid}")
来源.bash_profile。需要注意的是,如果你是在Mac上,你应该放在.bash_profile
建议的代码,而不是.bashrc
感谢您的回答。但发送杀死-SIGUSR1似乎只是杀死了bash进程。并打印“[处理完成]”。我正在使用mac。我错过了什么吗? – ytbryan
有没有可用于Mac的bash?使用我刚才编写的代码将SIGUSR1捕获到shell中非常重要。你可以通过输入命令“trap”来验证它是否工作 - 它应该显示你在SIGUSR1上执行的功能 –
太好了!它就像一个魅力! 所以我基本上把这段代码放在.bash_profile而不是.bashrc中,因为mac使用.bash_profile而不是.bashrc。 – ytbryan