从Bash脚本中执行"source ~/.bashrc"命令无法生效。

4

我正在尝试创建一个脚本,只需重新加载bashrc一次,但它没有起作用。

reloader.sh

#!bin/bash
source ~/.bashrc
rm reloader.sh

1
你需要使用 source 命令来运行脚本。否则它会在子shell中运行,而 .bashrc 所做的更改不会影响到你原来的shell。 - Barmar
如果你想编写一个脚本来加载 .bashrc 到当前 shell(在终端中的那个),只需要在命令行中使用 source 命令,如果是脚本需要 .bashrc,则你的代码应该可以正常工作。从技术上讲,带有选中标记的答案是错误的(无论你想要什么,这都是一种愚蠢的方法),而告诉你更改 shebang 的答案是正确的。你应该更清晰地表达你的问题。 - louigi600
2个回答

10
我遇到过同样的问题。问题在于只有交互式 shell 才能访问你在 .bashrc 中定义的内容(例如别名等)。
为了使你的 shell 脚本成为交互式的,请使用带参数的 shebang:
#!/bin/bash  -i

7
您需要使用 source 命令来运行脚本:
source reloader.sh

如果您只是作为命令运行它,它将在一个新的进程中运行,因此 .bashrc 所做的任何更改都不会影响您原来的 shell 进程。

当你已经在加载bashrc时,为什么需要重新加载bashrc? - Barmar
当尝试“rm reloader.sh”时,它是否出现错误? - Barmar
你确定它到达了吗?如果在它之前加上 echo removing reloader.sh,你能看到消息吗? - Barmar
.bashrc的开头加入set -x,这样你就可以看到执行的所有命令。 - Barmar
它并没有执行。我认为问题在于当他执行source ~/.bashrc时,进入了一个循环并不断重新加载bahrc。 - Peyker
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接