6

这是一个将 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 定义。文件已更新,但在打开新窗口之前没有发生任何更改。我需要source ~/.bash_profile在脚本执行后运行...

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

4

2 回答 2

10

来自 MangeshBiradar这里

. ./使用(dot space dot slash)执行 Shell 脚本

使用“dot space dot slash”执行shell脚本时,如下图所示,它将在当前shell中执行脚本,而不会派生子shell。

$ . ./setup.bash

换句话说,这将在当前 shell 中执行 setup.bash 中指定的命令,并为您准备环境。

于 2018-05-03T13:30:35.930 回答
3

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

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

于 2018-05-03T13:35:05.113 回答