这是一个将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
命令?
答案 0 :(得分:3)
来自MangeshBiradar here:
使用. ./
(点空间点斜杠)
在使用“点空间点斜杠”执行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
,它做同样的事情。)