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

时间:2018-05-03 13:25:41

标签: bash

这是一个将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 ...

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

2 个答案:

答案 0 :(得分:3)

来自MangeshBiradar here

使用. ./(点空间点斜杠)

执行Shell脚本

在使用“点空间点斜杠”执行shell脚本时,如下所示,它将在当前shell中执行脚本,而不会分支子shell。

$ . ./setup.bash

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

答案 1 :(得分:1)

bash脚本在自己的shell实例中运行。当shell退出时,忘记了新shell的所有环境变量(包括你的try: dummay_news = News.objects.get(url=story_url) return except News.DoesNotExist: dummay_news = News() story_p_tags = response.xpath("//div[contains(@class,'story__content')]/p/text()") for p in story_p_tags: summary_list.append(p.extract()) dummay_news.source = 'xyz' dummay_news.time = time dummay_news.title = story_title dummay_news.url = story_url dummay_news.set_summary(summary_list) if media_url: dummay_news.media_url = media_url dummay_news.save() yield dummay_news )。注意:这是一个安全考虑因素 - 如果shell可以改变它的调用者的环境,它可能很容易通过别名各种常用命令对该用户造成严重损害。

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