4

Я видел это, но это не работает для меня. Я не использую версию Gash от Git, а ту, которая поставляется с Cygwin, так что это может быть частью проблемы. Вот как у меня настроена вкладка в Console2:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe --login -i
Startup dir: %HOMEDRIVE%%HOMEPATH%

Это моя запись в реестре:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%1"

bash всегда начинается в моем домашнем каталоге, а не в каталоге, на который я нажимаю , затем мне нужно cd /cygdrive/d/code ... и т.д. Я попытался удалить значение в поле "Startup dir", изменив его на% 1,% 1% без удачи.

Я также попробовал это решение, но оно также не сработало для меня:

Title: bash.exe
Shell: C:\cygwin\bin\bash.exe -l

Реестр:

Directory
    shell
        Console2
            Open Console2 Here
            command
                "C:\Console2\Console.exe" -d "%V"

Приведенные выше решения работают для версий bash.exe и sh.exe, которые включены в Git, но не для версий, которые по какой-то причине включены в cygwin. Все еще ищу причину для этого.

РЕДАКТИРОВАТЬ

Я выбрал ответ ниже, но я думаю, что второе решение выше сработало бы, если бы я создал файл .profile в нужной папке. Я продолжал пытаться создать его в моем обычном домашнем каталоге вместо домашнего каталога, используемого cygwin, поэтому он никогда не выполнял сценарий. Это привело меня к мысли, что файл .profile не нужен. Ответ, который я выбрал (спасибо, Хью!) ясно объясняет, как каждый из сценариев (.bash_profile, .bash_login, .profile и .bashrc) используется bash, что помогло мне понять, что я поставил их не в том месте.

2 ответа2

5

Из руководства,

Когда Bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла /etc /profile, если этот файл существует.

/etc/profile по умолчанию содержит следующий код:

# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
  unset CHERE_INVOKING
else
  cd "${HOME}" || echo "WARNING: Failed attempt to cd into ${HOME}!"
fi

Таким образом, одним из решений будет создание пакетного файла Windows, который устанавливает переменную среды CHERE_INVOKING перед запуском bash. Это не очень аккуратно.

Следующий,

После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.

Эти скрипты профиля по умолчанию выполняют ваш скрипт ~/.bashrc если он существует. Помещение cd - в конце моего .bashrc работает для меня (с последней версией Console2 и Cygwin bash):

echo 'cd -' >> ~/.bashrc

Кстати, я вызываю Console2 (Console.exe) без аргументов - Windows Explorer гарантирует, что он запускается в каталоге, который я щелкнул правой кнопкой мыши. Я использую XP, но я сомневаюсь, что MS изменит это поведение в более поздних версиях Windows. Я также оставляю опцию "startup dir" пустой для моей вкладки Bash.

2

Кажется, вы не создали ~/.profile со следующим:

cd -

https://superuser.com/a/387273/139371

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