Cygwin .bashrc não sendo fonte porque o cygwin começa na casa do Windows

9

NOTA: Consulte minha segunda edição abaixo para obter uma atualização sobre o problema.

Cygwin estava funcionando bem para mim até a semana passada. Agora o .bashrc não está sendo originado. Devo ter instalado ou alterado algo, mas não consigo me lembrar exatamente o que causou o problema. Quando inicio o Cygwin, estou na minha casa do Windows e nenhum dos meus apelidos funciona. Eu tenho que fonte manualmente .bashrc. O seguinte é o meu Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

Alguma ideia?

EDIT: My .bash_profile contém o seguinte,

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

EDIT2: IMPORTANTE! Quando iniciei o Cygwin, ele inicia na minha pasta inicial do Windows. Tentei colocar meus arquivos .bash_profile e .bashrc nessa pasta e eles foram obtidos corretamente! Isso significa que o problema foi reduzido para descobrir por que o Cygwin inicia na pasta inicial do Windows e não na pasta inicial normal do Cygwin.

EDIT3: Resultados da execução do 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
gsingh2011
fonte
Quando o shell bash é iniciado (e o coloca no diretório inicial do Windows), o que é echo $HOMEimpresso?
perfil completo de Keith Thompson
Ele ecoa na minha casa do Windows, não na minha casa do Cygwin.
precisa saber é o seguinte
Mas usando a sintaxe do Cygwin, certo? (em /cygdrive/c/Users/foovez de C:\Users\foo)
Keith Thompson
Sim, usando a sintaxe do Cygwin.
precisa saber é o seguinte
O que acontece quando você digita HOME=/home/yourname bash -lno prompt do terminal? Se eu estiver certo, isso deve lhe dar um shell funcionando corretamente. Observe que este é um diagnóstico ou, na melhor das hipóteses, uma solução alternativa, não uma solução; ainda precisamos descobrir por que você $HOMEestá incorreto em primeiro lugar. O problema raiz é a configuração incorreta de $HOME; bash está se comportando corretamente.
keith thompson

Respostas:

9

O FAQ do Cygwin explica como $HOMEestá definido:

Ao iniciar o Cygwin a partir do Windows, HOMEé determinado da seguinte forma em ordem decrescente de prioridade:

  • HOME do ambiente Windows, traduzido para o formulário POSIX.
  • A entrada em /etc/passwd
  • /home/USERNAME

Ao usar o Cygwin da rede (telnet, ssh, ...), HOMEé definido como /etc/passwd.

Se você HOMEestiver definido como um valor como /cygdrive/c, é provável que tenha sido definido no Windows. Inicie uma janela de comando do DOS e digite set HOMEpara verificar se é esse o caso.

O acesso a unidades compartilhadas geralmente é restrito ao iniciar a partir da rede; portanto, os usuários do domínio podem desejar ter uma diferente HOMEno ambiente do Windows (na unidade compartilhada) e em /etc/passwd(na unidade local). Observe que o ssh apenas considera /etc/passwd, desconsiderando HOME.

Meu melhor palpite é que você estragou seu /etc/passwdarquivo. (O diretório inicial do Windows %USERPROFILE%não é %HOME%.)

O que é grep USERNAME /etc/passwdimpresso (substituindo USERNAMEpelo seu nome de usuário)?

Keith Thompson
fonte
Adicionei a saída à minha pergunta para facilitar a leitura. Parece que está definido corretamente lá. No entanto, abri minhas variáveis ​​de ambiente do Windows para ver se havia uma variável% HOME% e se havia e ela foi definida como% USERPATH%. Eu o removi, mas não resolveu meu problema. Talvez seja necessário reiniciar?
precisa saber é o seguinte
11
Você o removeu do painel de controle do sistema ou de um shell de comando do Windows usando set HOME=? É mais provável que o uso do painel de controle do sistema funcione, mas pode ser necessário reiniciar mesmo assim.
Thompson
Para removê-lo, clique com o botão direito do mouse em Computador no menu Iniciar, clique nas propriedades, nas configurações avançadas do sistema, nas variáveis ​​de ambiente e na remoção do HOME. Foi necessário reiniciar. Agora, o Cygwin carrega o diretório inicial correto. Obrigado pela ajuda.
precisa saber é o seguinte
1

Se você possui um .profile ou .bash_profile, que é originado em shells de logon, e você obtém um shell de logon desde que passa --login. Se você originar .profile, o bash não fará a origem .bashrc.

Eu tentaria colocar:

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

no seu .profile, veja se isso ajuda. Seu .bashrc ainda deve ser originado, normalmente, em outras invocações de shell que não são de login.

E não passe -ipara a festança; você não precisa disso. Bash tipo de hacks que, finge que você deu -ina linha de comando.

Rich Homolka
fonte
Meu .bash_profile e .profile têm linhas de código semelhantes. Veja minha pergunta atualizada.
precisa saber é o seguinte
Com licença, @ Rich Homolka, mas gostaria de saber por que você diz que isso -inão é necessário. Obrigado.
Sopalajo de Arrierez 04/03/2014
@SopalajodeArrierez se você tiver um shell interativo (não um script, mas ativo em um terminal), o bash fingirá que você o deu -ina linha de comando. Tente abrir uma janela de shell bash, então echo $-, você deve ver i(entre possivelmente outras bandeiras)
Rico Homolka
1

Eu experimentei o mesmo comportamento - provavelmente depois de ter o git (Windows) instalado.

Na configuração do sistema, encontrei a variável de usuário HOME = C: \ Users \ me e redefini-a para HOME = D: \ home

user377223
fonte