Estou tentando alterar o diretório inicial do Cygwin em um computador no trabalho. Nossos diretórios iniciais são mapeados para um compartilhamento de rede por padrão. Isso parece causar alguma confusão para o Cygwin, pois ele criou um diretório na minha área de trabalho que segue o mesmo caminho que o compartilhamento de rede seguiria, algum outro prefixo baseado em onde eu abro o cygwin.
Se eu abrir o Cygwin a partir do atalho padrão criado na instalação:
$ echo $HOME
/cygdrive/c/Users/shaun/Desktop/SERVER/USERS:USERS/SHAUN
Se eu abrir o Cygwin no PowerShell:
$ echo $HOME
/usr/bin/SERVER/USERS:USERS/SHAUN
Prefiro ter meu diretório inicial em um diretório de programas local que eu mesmo configurei para gerenciar programas. Assim:
/cygdrive/c/users/shaun/apps/cygwin/home/shaun
A maneira preferida de fazer isso,conforme recomendado pelo cygwin, é fazer uma entrada em /etc/nsswitch.conf
. Parece que deveria funcionar:
db_home: unix /%H/Apps/cygwin/home/shaun
Quaisquer alterações que fiz neste arquivo pareceram ser ignoradas. Reinicio o terminal e, mesmo quando baguncei intencionalmente a sintaxe, não recebo erros. Algumas das opções que tentei e falhei:
db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
db_home: /%H/Apps/cygwin/home/shaun
db_home: unix /%H/Apps/cygwin/home/shaun
db_home: cygwin desc
db_home: cygwin /path /%H/Apps/cygwin/home/shaun
Reiniciei o processo Cygwin após cada tentativa. Também tentei alterar a db_shell
opção /bin/sh
apenas como experiência, mas o shell não mudou.
Perguntas anteriores no StackExchange sugeriram alterar o /etc/passwd
arquivo. Só consegui fazer isso funcionar depois de comentar um bloco de código /etc/profile
que estava criando automaticamente o diretório HOME. E então, depois de algum tempo, voltou para a antiga CASA.
Há algo que estou faltando no /etc/nsswitch.conf
arquivo? Parece que seria uma maneira simples e conveniente de definir configurações personalizadas. As alternativas parecem hacks desatualizados que não são recomendados pelo Cygwin, mas se eu estiver errado, informe-me qual método é preferido.
Meu atual/etc/nsswitch.conf
# /etc/nsswitch.conf
#
# This file is read once by the first process in a Cygwin process tree.
# To pick up changes, restart all Cygwin processes. For a description
# see https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch
#
# Defaults:
# passwd: files db
# group: files db
# db_enum: cache builtin
# db_home: /home/%U
db_home: /cygdrive/c/users/shaun/apps/cygwin/home/shaun
# db_shell: /bin/bash
# db_gecos: <empty>
Responder1
db_home: unix /%H/Apps/cygwin/home/shaun
A página de manual que você refere diz para você usarunix
oua /path
, não os dois juntos.
A menos que o administrador do AD tenha definido o unixHomeDirectory
valor para cada usuário que usa Cygwin em sua organização, você não deseja usar unix
nada, mas sim o caminho.
Eu sugeriria uma modificação no que você forneceu:
db_home: /%H/Apps/cygwin/home/%u
Isso permitirá que a configuração funcione para vários usuários na mesma máquina.
Quaisquer alterações que fiz neste arquivo pareceram ser ignoradas.
Existem duas maneiras de substituir a nsswitch.conf
configuração:
Execute o utilitário do Cygwin
mkpasswd
, que gera/etc/passwd
e/etc/group
a partir dos bancos de dados de informações do usuário SAM ou AD. Este mecanismo éobsoleto, e só deve ser usado em instalações legadas do Cygwin ou para fins especiais.Defina a
%HOME%
variável de ambiente no nível do sistema Windows.Isso não apenas substitui o Cygwin, mas apenas sob certas circunstâncias, e é por isso que énão recomendado.
Verifique os conjuntos de variáveis de ambiente do usuário e do sistema para ter certeza de que isso não está acontecendo com você.
Perguntas anteriores no StackExchange sugeriram alterar o arquivo /etc/passwd
Você deve remover isso e usar o sistema Active Directory do seu site, controlando /etc/nsswitch.conf
como o Cygwin interage com ele.
Responder2
Quando tive problemas com um diretório inicial montado remotamente, usei o recurso "mapear unidade de rede", então My Documents
fui mapeado para uma letra de unidade, por exemplo U:\
. Então U:\
se torna um apelido para My Documents
. Aí editei /etc/passwd
para que os ~
pontos fossem /cygdrive/u
e aí tudo funcionou.
Isso também pode ser feito com diretórios locais, mas o subst
comando deve ser usado cmd.exe
para criar o alias em vez de "Mapear unidade de rede". Mapear a unidade de rede é permanente, mas subst
não é, portanto, um script que faz isso em cada inicialização deve ser colocado na Start
pasta do Windows.