MSYS2 не является источником.profile
Использование MSYS2, если я запускаю msys2_shell.bat
, mintty
открывает оболочку входа в bash, но ~/.profile
не получен.
Во всяком случае, если я бегу /bin/bash --login
внутри mintty
, ~/.profile
получить источник. Зачем?
То же самое происходит, если я бегу path\to\msys64\bin\bash.exe --login
через Windows вместо msys2_shell.bat
,
PS: я пробовал также с .bash_profile
,
2 ответа
Отключение (переименование) всей системы /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
Первая строка объясняет, почему при запуске subshell (во второй раз) все работает: переменные среды уже установлены, поэтому скрипт возвращается.
Проблема в том, что 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
Обратите внимание, что последняя строка необходима для монтирования вашей домашней директории... Я не уверен, почему вам нужно явно сделать это в /etc/fstab
потому что он, кажется, монтирует его без его присутствия... но, возможно, он не монтировал его должным образом?
Надеюсь, что это работает для вас, как и для меня.