Acabei de instalar o Cygwin, e parece que o diretório inicial no prompt do bash está na minha unidade Z :. Não é onde eu quero.
Como posso mudar isso?
Acabei de instalar o Cygwin, e parece que o diretório inicial no prompt do bash está na minha unidade Z :. Não é onde eu quero.
Como posso mudar isso?
Respostas:
A partir do Cygwin 1.7.34 , a maneira recomendada de fazer isso é adicionar uma db_home
configuração personalizada /etc/nsswitch.conf
. Um desejo comum ao fazer isso é tornar o diretório inicial do Cygwin igual ao diretório de perfil de usuário do Windows. Essa configuração fará o seguinte:
db_home: windows
Ou equivalente:
db_home: /%H
Você precisa usar o último formulário se desejar alguma variação desse esquema, como segregar os arquivos iniciais do Cygwin em um subdiretório do diretório de perfil de usuário do Windows:
db_home: /%H/cygwin
Existem vários outros esquemas alternativos para a windows
opção, além de vários outros %
tokens que você pode usar em vez %H
ou além dela. Veja a nsswitch.conf
descrição da sintaxe no Cygwin User Guide. para obter detalhes.
Se você instalou o Cygwin anterior à 1.7.34 ou executou seu mkpasswd
utilitário para ter um /etc/passwd
arquivo, você pode alterar o diretório inicial do Cygwin editando a entrada do usuário nesse arquivo. Seu diretório pessoal é o penúltimo elemento na linha do usuário em/etc/passwd
.¹
Seja como for, isso faz com que o HOME
variável de ambiente seja definida durante a inicialização do shell.²
Consulte este item da FAQ para obter mais informações sobre o tópico.
Notas de rodapé:
Considere mudar /etc/passwd
e /etc/group
sair do caminho para usar o novo mecanismo baseado em SAM / AD .
Embora seja possível simplesmente definir %HOME%
através do Painel de Controle, é oficialmente desencorajado . Ele não apenas substitui sem cerimônia os mecanismos acima, como nem sempre funciona, como ao executar scripts de shell via cron
.
ssh
não funcionaria corretamente até a edição, /etc/passwd
conforme descrito.
/etc/passwd
arquivo. Veja minha resposta aqui para evitar esses problemas.
db_home: /%H
pode resolver um nome de usuário de domínio (em vez do nome de usuário local), que pode não ser o que você gostaria de ter. db_home: /cygdrive/c/Users/%U
fiz o que eu queria ter.
db_home: windows
, leva sh
cerca de 2,5 a 3,5 segundos para iniciar. Quando uso db_home: /cygdrive/c/Users/%U
, leva de sh
0,9 a 1,0 segundos para iniciar. Quando eu excluo a db_home
linha ou a codifico no diretório inicial do Windows, sh
leva cerca de 0,2 a 0,3 segundos para iniciar. Eu vou com a solução codificada, por exemplo db_home: /cygdrive/c/Users/susam
, porque geralmente executo scripts de shell no Prompt de Comando usando o sh
comando, por exemplo, sh foo.sh
e torna-se inconveniente aguardar mais de 2 segundos.
Para aqueles que usam o Cygwin 1.7.34 ou superior, o Cygwin suporta a configuração de como obter informações de diretório inicial, shell de login e gecos no /etc/nsswitch.conf
. Isso está detalhado na seção Guia do usuário do Cygwin:
Se você já criou um arquivo /etc/passwd
ou, /etc/group
deverá removê-los e configurar o Cygwin usando o novo modelo de Segurança do Windows para mapeamentos POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
A configuração /etc/nsswitch.conf
do arquivo db_home:
define como o Cygwin busca o diretório inicial do usuário. A configuração padrão para db_home:
é
db_home: /home/%U
Portanto, por padrão, Cygwin apenas define o diretório home como /home/$USERNAME
. Você pode alterar isso para apontar para qualquer outro caminho personalizado que desejar. Os caracteres curinga suportados são:
%u
O nome de usuário do Cygwin (que é minúsculo).%U
O nome de usuário do Windows (que é U maiúsculo).%D
Domínio do Windows no estilo NetBIOS.%H
Diretório inicial do Windows no estilo POSIX. Observe que, para a db_home:
configuração, isso só faz sentido logo após a barra anterior, como emdb_home: /%H/cygwin
%_
Como espaço e caracteres TAB são usados para separar os esquemas, um espaço no nome do arquivo deve ser fornecido como %_
(isso é um sublinhado).%%
Um personagem por cento.No lugar de um caminho, você pode especificar um dos quatro esquemas de caminho nomeados predefinidos.
windows
O diretório inicial do usuário é definido como o mesmo diretório usado no diretório inicial do Windows, geralmente algo como %USERPROFILE%
ou C:\Users\$USERNAME
. Obviamente, o diretório do Windows é convertido no estilo POSIX pelo Cygwin.
cygwin
Somente AD: o diretório inicial do usuário é definido como o caminho POSIX fornecido no atributo cygwinHome da classe auxiliar cygwinUser. Veja também a seção chamada “O esquema cygwin” .
unix
Somente AD: o diretório inicial do usuário é definido como o caminho POSIX fornecido no atributo unixHomeDirectory da classe auxiliar posixAccount. Veja também a seção chamada “O esquema unix” .
desc
O diretório inicial do usuário é definido como o caminho POSIX fornecido na configuração home = "..." XML-similar no atributo de descrição do usuário no SAM ou AD. Veja a seção “O esquema desc” para uma descrição detalhada.
A seguir, o diretório inicial do usuário no Cygwin tornará o mesmo usado no diretório inicial do Windows.
db_home: windows
Para aqueles que usam o Cygwin 1.7.33 ou anterior, atualize para a versão mais recente do Cygwin e remova os arquivos /etc/passwd
e os /etc/group
arquivos usados anteriormente, e siga as etapas acima.
Caso contrário, siga estas etapas anteriores abaixo.
Primeiramente, defina uma variável de ambiente do Windows para HOME que aponte para o seu perfil de usuário:
HOME
%USERPROFILE%
Agora vamos atualizar o /etc/passwd
arquivo Cygwin com a %HOME%
variável do Windows que acabamos de criar. Os logons do shell e os logins remotos via ssh
contarão /etc/passwd
com a localização do $HOME
caminho do usuário .
No prompt de comando do Cygwin bash, digite o seguinte:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
O -d
comutador diz ao mkpasswd para incluir usuários DOMAIN, enquanto -l
deve apenas gerar usuários de máquinas LOCAL. Isso é importante se você estiver usando um PC no local de trabalho, onde as informações do usuário são obtidas de um Controlador de Domínio do Windows.
Agora, você também pode fazer o mesmo para grupos, embora isso não seja necessário, a menos que você esteja usando um computador que faz parte de um domínio do Windows. O Cygwin lê as informações do grupo nos bancos de dados da conta do Windows, mas você pode adicionar um /etc/group
arquivo se a sua máquina estiver frequentemente desconectada do seu Controlador de Domínio.
No prompt do Cygwin bash, digite o seguinte:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Agora, saia do Cygwin e inicie novamente. Você deve achar que o caminho HOME aponta para o mesmo local que o seu Perfil de Usuário do Windows - ou seja,/cygdrive/c/Users/username
mkgroup
acima.
Eu fiz algo bastante simples. Eu não queria alterar a variável de ambiente do Windows 7. Então eu editei diretamente o arquivo Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Isso apenas inicia o shell local com este diretório inicial; era isso que eu queria. Não vou acessar remotamente isso, então funcionou para mim.
%HOME%
local antigo do Windows , enquanto o Cygwin vim usa o novo $HOME
caminho que você declarou.
O Cygwin mount
agora suporta o método de ligação , que permite montar um diretório. Portanto, você pode simplesmente adicionar a seguinte linha em /etc/fstab
e depois reiniciar seu shell:
c:/Users /home none bind 0 0
Mude sua variável de ambiente HOME.
no XP, clique com o botão direito do mouse em Meu computador >> Propriedades >> Avançado >> Variáveis de ambiente >> Variáveis de usuário para >> [selecione a variável HOME] >> editar
Gostaria de adicionar uma correção / atualização ao valor de $ HOME com precedência. O diretório inicial em / etc / passwd tem precedência sobre tudo.
Sou usuário do Cygwin há muito tempo e fiz uma instalação limpa do Windows 7 x64 e Cygwin V1.126. Eu estava enlouquecendo tentando descobrir por que, toda vez que rodava o ssh, eu ficava recebendo:
e:\>ssh foo.bar.com
Could not create directory '/home/dhaynes/.ssh'.
The authenticity of host 'foo.bar.com (10.66.19.19)' can't be established.
...
Eu adiciono a definição HOME = c: \ users \ dhaynes no ambiente Windows, mas ainda assim ela continuou tentando criar '/ home / dhaynes'. Tentei todas as combinações possíveis, incluindo a configuração de HOME como / cygdrive / c / users / dhaynes. Pesquisou a mensagem de erro no Google, não encontrou nada, não encontrou nada no site cygwin. Eu uso o cygwin do cmd.exe, não o bash.exe, mas o problema estava presente em ambos.
Finalmente percebi que o diretório inicial em / etc / passwd estava tendo precedência sobre a variável de ambiente $ HOME. Eu simplesmente re-executei 'mkpasswd -l> / etc / passwd' e atualizei o diretório home, agora tudo está bem com o ssh.
Isso pode ser óbvio para os tipos de linux com experiência com o sysadmin, mas para aqueles que usam o Windows principalmente, é um pouco obscuro.
Por acaso, uso o cwRsync (Cygwin + Rsync para Windows) onde o cygwin é fornecido, e não consegui encontrar o arquivo / etc / passwd.
E continuou dizendo
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Então, eu escrevi um arquivo em lotes que mudou a variável HOME antes de executar o rsync. Algo como:
set HOME=.
rsync /path1 user@host:/path2
E viola! A pasta .ssh apareceu no diretório de trabalho atual e o rsync parou de ser irritante com as impressões digitais rsa.
É um hotfix rápido, mas mais tarde você deve alterar HOME para um local mais seguro.
db_home:
para citá-lo e fazê-lo funcionar.