Настройте Console2 для открытия bash в текущей папке

Я видел это, но это не работает для меня. Я не использую версию 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 ответа

Решение

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

Когда 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.

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

cd -

/questions/383034/git-bash-zdes-v-console2/383038#383038

Другие вопросы по тегам