Configure o Console2 para abrir o bash na pasta atual

4

Eu vi isso , mas não funciona para mim. Eu não estou usando a versão do Git do bash, mas a que vem com o cygwin, então isso poderia ser parte do problema. Aqui está como eu tenho minha guia na configuração Console2:

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

Esta é a minha entrada de registro:

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

bash sempre começa no meu diretório home em vez do diretório em que estou clicando, então eu tenho que cd /cygdrive/d/code ... etc. Eu tentei remover o valor no campo "Startup dir", alterando para% 1 ,% 1% sem sorte.

Eu também tentei esta solução mas também não funcionou para mim:

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

Registro:

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

As soluções acima funcionam para as versões de bash.exe e sh.exe que estão incluídas no Git, mas não as versões incluídas com o cygwin por algum motivo. Ainda procurando uma razão para isso.

EDITAR

Selecionei uma resposta abaixo, mas acho que a segunda solução acima teria funcionado se eu tivesse criado o arquivo .profile na pasta correta. Continuei tentando criá-lo em meu diretório pessoal normal, em vez do diretório inicial usado pelo cygwin, e é por isso que ele nunca executou o script. Isso me levou a acreditar que o arquivo .profile era desnecessário. A resposta que selecionei (obrigado, Hugh!) Explica claramente como cada um dos scripts (.bash_profile, .bash_login, .profile e .bashrc) é usado pelo bash, o que me ajudou a entender que eu estava colocando-os no lugar errado. / p>     

por David Kennedy 07.09.2012 / 02:05

2 respostas

5

No manual ,

When Bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists.

Por padrão,

/etc/profile contém o seguinte código:

# 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

Portanto, uma solução seria criar um arquivo de lote do Windows que define a variável de ambiente CHERE_INVOKING antes de iniciar o bash. Isso não é muito legal.

Em seguida,

After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.

Por padrão, esses scripts de perfil executam seu script ~/.bashrc , se existir. Colocar cd - no final do meu .bashrc funciona para mim (com o mais recente Console2 e Cygwin bash):

echo 'cd -' >> ~/.bashrc

BTW, eu invoco o Console2 ( Console.exe ) sem argumentos - o Windows Explorer garante que ele inicialize no diretório em que eu cliquei com o botão direito do mouse. Estou usando o XP, mas duvido que o MS altere esse comportamento em versões posteriores do Windows. Eu também deixo a opção "startup dir" em branco para minha aba Bash.

    
por 17.09.2012 / 10:37
1

Parece que você não criou ~/.profile com o seguinte:

cd -

link

    
por 12.09.2012 / 22:04