Cygwin .bashrc не є джерелом, оскільки cygwin починається в будинку Windows


9

ПРИМІТКА. Будь ласка, дивіться мою другу редакцію нижче для оновлення проблеми.

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

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Будь-які ідеї?

EDIT: Мій .bash_profile містить таке,

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

EDIT2: ВАЖЛИВО! Коли я запустив Cygwin, він запускається в домашній папці Windows. Я спробував помістити свої файли .bash_profile та .bashrc у цю папку, і вони були правильно поставлені! Це означає, що проблема зводилася до з'ясування того, чому Cygwin запускається в домашній папці Windows, а не у звичайній домашній папці Cygwin.

EDIT3: Результати роботи grep Gulshan / тощо / 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

Коли ваша команда bash запускається (і поміщує вас у домашній каталог Windows), що робити з echo $HOMEдруком?
Кіт Томпсон

Це перегукується з моїм будинком Windows, а не з домом Cygwin.
gsingh2011

Але використовуючи синтаксис Cygwin, правда? ( /cygdrive/c/Users/fooа не C:\Users\foo)
Кіт Томпсон

Так, використовуючи синтаксис Cygwin.
gsingh2011

Що відбувається, коли ви вводите HOME=/home/yourname bash -lпідказку терміналу? Якщо я маю рацію, це повинно дати вам належну оболонку. Зауважте, що це діагностика або в кращому випадку не рішення; нам ще потрібно з’ясувати, чому $HOMEв першу чергу ви невірні. Основна проблема - неправильне налаштування $HOME; Баш поводиться правильно.
Кіт Томпсон

Відповіді:


9

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ваше ім’я користувача)?


Я додав висновок до свого питання, щоб його було легше читати. Схоже, там правильно встановлено. Однак я відкрив свої змінні середовища Windows, щоб побачити, чи існувала змінна% HOME%, і чи було, і було встановлено% USERPATH%. Я її видалив, але це не вирішило мою проблему. Можливо, йому потрібен перезапуск?
gsingh2011

1
Ви видалили його з панелі управління Системою або з командної оболонки Windows, використовуючи set HOME=? Використання панелі керування системою швидше спрацює, але перезапуск може знадобитися навіть тоді.
Кіт Томпсон

Я видалив його, клацнувши правою кнопкою миші на "Комп'ютер" у меню "Пуск", натиснувши на "Властивості", натиснувши на розширені налаштування системи, потім на змінні середовища, а потім видаливши ДОМАШНУ. Перезапуск був необхідний. Тепер Cygwin завантажує правий домашній каталог. Дякую за допомогу.
gsingh2011

1

Якщо у вас є .profile або .bash_profile, він розміщений на оболонках входу, і ви отримаєте оболонку входу після проходження --login. Якщо ви використовуєте .profile, то bash не буде джерелом .bashrc.

Я б спробував поставити:

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

у своєму .profile, дивіться, чи це допомагає. Ваш .bashrc як і раніше повинен знаходитись у інших викликах оболонок, які не входять у систему.

І не переходити -iдо удару; вам це не потрібно. Bash вид хакі, що в, робить вигляд, що ви дали -iв командному рядку.


Мій .bash_profile та .profile мають подібні рядки коду. Дивіться моє оновлене запитання.
gsingh2011

Вибачте, @ Rich Homolka, але я хотів би знати, чому ти кажеш, що -iце не потрібно. Дякую.
Sopalajo de Arrierez

@SopalajodeArrierez, якщо у вас інтерактивна оболонка (не сценарій, але активна в терміналі), bash робить вигляд, що ви дали її -iв командному рядку. Спробуйте відкрити вікно bash shell, тоді echo $-ви побачите i(серед можливо інших прапорів)
Rich Homolka

1

Я відчував таку ж поведінку - ймовірно, після встановлення git (Windows).

У системних налаштуваннях я знайшов змінну користувача HOME = C: \ Users \ me і скинув її до HOME = D: \ home

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.