使用MSYS2,如果我运行msys2_shell.bat
,mintty
会打开一个bash登录shell,但~/.profile
不会获得来源。
不管怎样,如果我在mintty
中运行/bin/bash --login
,~/.profile
就会得到来源。为什么?
如果我通过Windows提示符而不是msys2_shell.bat
运行pathtomsys64binbash.exe --login
,也会发生同样的情况。
附言:我也试过.bash_profile
。
禁用(重命名(系统范围的/etc/profile
,来源为~/.profile
。
在研究了/etc/profile
之后,我看到了这一点,保留了它,但对函数profile_d ()
~/.profile
进行了注释。此函数运行/etc/profile.d/
中的脚本。
单独禁用它们,我意识到罪魁祸首是/etc/profile.d/bash_completion.sh
。
上面写着:
# Check for interactive bash and that we haven't already been sourced.
[ -z "$BASH_VERSION" -o -z "$PS1" -o -n "$BASH_COMPLETION_COMPAT_DIR" ] && return
# Check for recent enough version of bash.
bash=${BASH_VERSION%.*}; bmajor=${bash%.*}; bminor=${bash#*.}
if [ $bmajor -gt 4 ] || [ $bmajor -eq 4 -a $bminor -ge 1 ]; then
[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] &&
. "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
# Source completion code.
. /usr/share/bash-completion/bash_completion
fi
fi
unset bash bmajor bminor
第一行解释了为什么在运行子shell(第二次(时一切正常:环境变量已经设置好了,所以脚本返回。
问题是bash_completion.sh
运行/usr/share/bash-completion/bash_completion
,这真的很庞大,很难把握问题。
我也遇到了同样的问题。
在丹的帮助下,我在这张票的评论帖子中发现了这一点:https://sourceforge.net/p/msys2/tickets/97
解决方案是编辑/etc/fstab
$ cat /etc/fstab
# For a description of the file format, see the Users Guide
# http://cygwin.com/cygwin-ug-net/using.html#mount-table
# DO NOT REMOVE NEXT LINE. It remove cygdrive prefix from path
none / cygdrive binary,posix=0,noacl,user 0 0
d:/Users/dparker /home/dparker ntfs binary,posix=0,user 0 0
请注意,最后一行是安装home目录所必需的…我不确定为什么您需要在/etc/fstab
中显式地执行此操作,因为它似乎是在不存在的情况下安装的。。。但也许它没有正确安装?
希望这对你和我一样有效。