`source ~/.bash_profile` 在 bash 脚本中不起作用

`source ~/.bash_profile` do not works inside a bash script

这是一个将 bash 文件移动到主页并使用 source 命令加载它的脚本。

# update.sh
#!/bin/bash
cp -f $PWD/bash_profile ~/.bash_profile
source ~/.bash_profile

不行!它用 cp -f $PWD/bash_profile ~/.bash_profile.

更新文件

~/.bash_profile 内有一个新的 PS1 定义。文件已更新,但在打开新 window 之前未发生任何更改。我需要在脚本执行后 运行 source ~/.bash_profile ...

是否可以在 bash 脚本中使用 运行 source 命令?

来自 MangeshBiradar here:

使用 . ./ 执行 Shell 脚本(点 space 点斜线)

在执行shell脚本时使用“点space点斜线”,如下图,会在当前shell执行脚本,不会fork子[=25] =].

$ . ./setup.bash

也就是说,在当前shell中执行setup.bash中指定的命令,并为您准备环境。

bash 脚本 运行 在它自己的 shell 实例中。当 shell 退出时,新 shell 的所有环境变量(包括您的 PS1)都将被遗忘。注意:这是出于安全考虑——如果 shell 可以更改其调用者的环境,它很容易通过为各种常用命令设置别名来对该用户造成严重损害。

如果您 运行 source update.sh,它将 运行 命令就像用户自己输入的一样。 (或者您可以按照@JonathanMay 的建议使用 . 来做同样的事情)。