我有一个.sources
符号链接,该链接指向一个目录,其中包含在打开终端时希望提供的文件。
在我的.bashrc
文件~/.bash_profile
中,我有以下代码
sourcesDir=$HOME/.sources
ls -B $sourcesDir | while read filename; do
echo "source $sourcesDir/$filename"
source $sourcesDir/$filename
done
启动Terminal时,得到以下输出
source /Users/merlinpatterson/.sources/bash_aliases
source /Users/merlinpatterson/.sources/git_completion.bash
source /Users/merlinpatterson/.sources/git_prompt.sh
source /Users/merlinpatterson/.sources/meteor.sh
但是,当我运行alias
时,没有任何别名出现。导出的所有变量均为空白。并且找不到__git_ps1
。
如果我在启动Terminal之后运行上述命令,那么一切都会正常,因此文件本身就很好。
为什么source
的结果不停留在终端机中?
答案 0 :(得分:2)
while
循环在子shell中运行,而不是当前的shell。改用
for filename in "$sourcesDir"/*; do
source "$filename"
done