8

ПРИМЕЧАНИЕ. Пожалуйста, см. Мое второе редактирование ниже для получения обновленной информации о проблеме.

Cygwin работал хорошо для меня до прошлой недели. Теперь .bashrc не получает источник. Я, должно быть, установил что-то или изменил что-то, но я не могу точно вспомнить, что вызвало проблему. Когда я запускаю Cygwin, я нахожусь в моем доме Windows, и ни один из моих псевдонимов не работает. Я должен вручную .bashrc. Вот мой Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Есть идеи?

РЕДАКТИРОВАТЬ: мой .bash_profile содержит следующее,

# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
  source "${HOME}/.bashrc"
fi

РЕДАКТИРОВАТЬ 2: ВАЖНО! Когда я запускал Cygwin, он запускался в моей домашней папке Windows. Я попытался поместить мои .bash_profile и .bashrc в эту папку, и они были получены правильно! Это означает, что проблема сводится к выяснению, почему Cygwin запускается в домашней папке Windows, а не в обычной домашней папке Cygwin.

РЕДАКТИРОВАТЬ 3: Результаты выполнения grep Gulshan /etc /passwd /

$ grep Gulshan /etc/passwd
Administrator:unused:500:513:U-Gulshan-HP\Administrator,S-1-5-21-1235613160-4193452482-2032876723-500:/home/Administrator:/bin/bash
Guest:unused:501:513:U-Gulshan-HP\Guest,S-1-5-21-1235613160-4193452482-2032876723-501:/home/Guest:/bin/bash
Gulshan:unused:1000:513:U-Gulshan-HP\Gulshan,S-1-5-21-1235613160-4193452482-2032876723-1000:/home/Gulshan:/bin/bash

3 ответа3

7

В Cygwin FAQ объясняется, как устанавливается $HOME :

При запуске Cygwin из Windows HOME определяется следующим образом в порядке уменьшения приоритета:

  • HOME из среды Windows, переведено в форму POSIX.
  • Запись в /etc/passwd
  • /home/USERNAME

При использовании Cygwin из сети (telnet, ssh, ...) HOME устанавливается из /etc/passwd .

Если для вашего HOME задано значение, например /cygdrive/c , вероятно, оно было задано в Windows. Запустите командное окно DOS и введите set HOME чтобы проверить, так ли это.

Доступ к общим дискам часто ограничен при запуске из сети, поэтому пользователи домена могут захотеть иметь другой HOME в среде Windows (на общем диске), чем в /etc/passwd (на локальном диске). Обратите внимание, что ssh рассматривает только /etc/passwd , игнорируя HOME .

Мое лучшее предположение, что вы испортили ваш файл /etc/passwd . (Домашний каталог Windows - %USERPROFILE% , а не %HOME% .)

Что печатает grep USERNAME /etc/passwd (заменяя USERNAME вашим именем пользователя)?

1

Если у вас есть .profile или .bash_profile, это происходит из оболочек входа в систему, и вы получаете оболочку входа в систему, так как вы передаете --login . Если вы используете исходный код .profile, то bash не будет иметь исходный код .bashrc.

Я бы попробовал поставить:

[ -f $HOME/.bashrc ] && source $HOME/.bashrc

в вашем .profile, посмотрите, поможет ли это. Ваш .bashrc должен по-прежнему поступать, как обычно, в других вызовах оболочки без входа в систему.

И не передавайте -i bash; тебе это не нужно Bash вид хаков, которые притворяются, что вы дали -i в командной строке.

1

Я испытал такое же поведение - вероятно, после установки git (Windows).

В настройках системы я нашел пользовательскую переменную HOME = C:\Users\me и сбросил ее на HOME = D:\home.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .