Um dos tutoriais que acompanho afirmou brevemente que cd .
não tem utilidade. Ao tentar replicar o problema mostrado pelo OP na recursão do link simbólico - o que o faz "redefinir"? , Também tentei cd .
, que mostrou o mesmo efeito descrito no OP ( $PWD
variável crescente ), que pode ser combatido cd -P
.
Isso me faz pensar: existe algum caso em que alguém realmente queira usar cd .
?
cd-command
Sergiy Kolodyazhnyy
fonte
fonte
cd .
para acioná-las porque é curta e simples. Embora eu pense que você pretendeu que a pergunta fosse para um ambiente de baunilha.$PWD
,cd .
também muda$OLDPWD
para o diretório atual. (Atualmente) não tenho idéia do por que isso pode ser útil, mas por uma questão de perfeição ...cd .
, embora, ao ver as respostas abaixo, possa no futuro, mas às vezes useipushd .
quando queriapopd
voltar a esse diretório mais tarde. por exemplo, ao executar um script de compilaçãoconfigure
,cd output...
emake
, e quando estiver pronto, vou querer voltar ao diretório original. Em vez de manter minha própria cópia do buildscript que é diferente do que todo mundo espera, eu apenas o executopushd .; ./BuildScriptName.sh; popd
, e isso também me dá a liberdade de nãopopd
algumas vezes, e depoispopd
mais tarde./bin/cd
aqui unix.stackexchange.com/q/50058/85039Respostas:
Eu acho que isso está exagerando no problema.
cd .
pode não ser algo que seria executado manualmente no curso normal, mas definitivamente é algo que pode surgir na execução programática (pense em qualquer situação em que você possa encontrarcd
o diretório que contém um arquivo, cujo caminho é fornecido pelo usuário ) Portanto, ele não precisa ter um uso específico: desde que cumpra a semântica usualcd <some-path>
, é útil.fonte
.
deve ser tratado como um caminho válido especificado pelacd
sintaxe.IFS= read Dir; do cd "$Dir"; do_something; done < <(find . -type d)
. Durante seu curso, find produz.
como caminho, para que o comando secd "$Dir"
expanda paracd .
. Portanto, nos scripts, é perfeitamente útil.cd ${path_to_directory}
, mas em algum momento o diretório é o diretório atual e,path_to_directory = .
portanto, você precisacd .
trabalhar apenas por precaução.if
verificações eelse
cláusulas, qualquer tipo de revestimento especial).O caminho do diretório poderia ter sido alterado desde que o último comando foi executado, e sem
cd .
os shells bash e ksh93, o diretório de trabalho lógico descrito no post vinculado na pergunta será chamado, portanto, chamar ocd .
que faz com que o shell emita ogetcwd()
syscall garantirá que seu o caminho atual ainda é válido.Etapas para reproduzir no bash:
mkdir ./dir_no_1; cd ./dir_no_1
mv dir_no_1 dir_no_2
echo $PWD
epwd
. Observe que o diretório foi renomeado externamente; o ambiente do shell não foi atualizado.cd .; pwd; echo $PWD
. Observe que o valor foi atualizado.O ksh93, no entanto, não atualiza as informações do ambiente; portanto,
cd .
no ksh93 pode ser realmente inútil. No/bin/dash
Ubuntu e em outros sistemas baseados no Debian,cd .
retornadash: 3: cd: can't cd to .
erro, no entantocd -P .
funciona (ao contrário do ksh93).fonte
mv ../dir_no_1 ../dir_no_2
no mesmo terminal / bash.pwd
na verdade , é incorporado, no entanto, invocar/bin/pwd
não afeta o ambiente do shell - utilitários externos em geral não afetam o ambiente do shell. A razão pela qual/bin/cd
e/bin/pwd
existe é para conformidade com POSIX, entre outras coisas. Há uma boa discussão sobre cd externo alguns dos quais provavelmente se aplica a/bin/pwd
bemOutro caso de uso
cd .
seria quando o diretório em que você está atualmente foi excluído e criado novamente. Considere tentar o seguinte -temp
cd temp
e então faça umls
temp
ls: cannot open directory .: Stale file handle
cd .
e depois fazer um ls funciona bemfonte
cd: can't cd to .
Agora que eu olhar para ele, isso já está mencionado na resposta do Sergiy (mover, excluir / recriar - essencialmente o mesmo: o diretório que você está em não é mais o que era no original caminho)cd .
para mover para o novo diretório com o mesmo nome.cd .
o tempo todo quando tenho um shell cujo diretório de trabalho atual foi montado com sshfs, mas a sessão ssh foi fechada e reaberta.PWD
variável de ambiente) e, em seguida, percorrer a hierarquia do sistema de arquivos da raiz, até um diretório que pode ser acessado via esse caminho, se é realmente o mesmo diretório ou não. Isso se encaixa exatamente no caso de uso nesta resposta.cd .
funciona quando o diretório foi desvinculado e um novo diretório diferente é criado no mesmo caminho do sistema de arquivos. O diretório de trabalho atual foi desvinculado e, presumivelmente, como parte dele, ele não possui mais uma entrada.
ou..
, e mesmo se tiver, a.
entrada deve continuar apontando para si mesma. Parece que o shell ou o kernel está executando o comando cd com base no nome do caminho do diretório, em vez de simplesmente acessar a.
entrada. Alguém pode confirmar esse comportamento?Você pode limpar
$OLDPWD
rapidamentecd .
, se houver um caso em que não queira que aponte para qualquer lugar "interessante". Isso também afetarácd -
.fonte
Programaticamente, é útil como não operacional. Considere um caminho fornecido a partir da entrada externa.
Com um caminho como "fred.txt", o diretório se tornará
.
, levando acd .
fonte
dirname
comando gera,.
quando necessário, para evitar a quebra de código que espera poder dividir um caminho.Isso é comum se você tiver que trabalhar com um cabo USB ruim. Depois que um dispositivo é desconectado e conectado novamente, e montado automaticamente no mesmo diretório, você precisa usá
cd .
-lo para fazê-lo funcionar novamente.fonte
Observe que "." é a maneira correta de especificar o nome do arquivo que está aberto como o diretório de trabalho atual de qualquer processo (incluindo um processo de shell, é claro) e "." sempre é um nome válido de um arquivo em todo e qualquer diretório, incluindo o diretório de trabalho atual. O nome
.
pode não ser um nome válido para um arquivo para uma determinada instância de um processo se, por exemplo, o diretório de trabalho atual subjacente tiver sido removido (ou ficar "ruim", por exemplo, um identificador NFS antigo), mas for um nome válido de um arquivo que é garantido que existe em todos os diretórios válidos.Portanto,
.
deve ser um argumento válido para qualquer comando que aceite o nome de um diretório e, portanto, no shell padrãocd .
deve ser um comando válido.Se
cd .
é útil ou não, depende da implementação do shell. Como mencionado, pode ser útil se o shell redefinir sua idéia interna do nome do caminho completo do diretório de trabalho atual após chamar achdir
chamada de sistema subjacente , por exemplo, se o diretório subjacente (ou algum pai dele) foi renomeado.Pelo menos alguns shells que eu conheço (
/bin/sh
no FreeBSD e NetBSD) serão convertidoscd ""
emcd .
, o que pode ser descrito como um recurso para dar suporte ao uso programático em um shell script em que uma variável pode ser usada como parâmetro (por exemplo, converter uma substituição de variável vazia em um " não faça nada "), embora o histórico de consolidação do FreeBSD diga que a mudança ocorreu diretamente devido à adição do suporte ao POSIX para evitar uma falhachdir("")
, da qual os mandatos do POSIX devem falhar.Alguns outros shells substituirão o que
.
quer que tenham armazenado como o nome completo do caminho para o diretório de trabalho atual e, portanto, para eles, isso poderá permitir o comportamento mencionado na resposta de Sahil Agarwal .fonte
Eu usei esse comando hoje mesmo quando refiz a nova ramificação em que estava trabalhando no Git, a partir de um diretório que foi criado pela primeira vez na mesma ramificação. O rebase correu bem, mas depois
git status
gerou um erro. Depois quecd .
tudo estava normal.(Eu estava trabalhando no MobaXterm no Windows, aliás. Caso você esteja tentando reproduzir isso. Isso pode não acontecer em outros sistemas.)
Também usei esse comando em diretórios que são atualizados por um processo automatizado que se afasta do diretório antigo e o substitui por um novo (por isso é o mais próximo possível do atômico). Não é uma situação comum, mas
cd .
é exatamente o que é necessário.Depois de ler esta excelente resposta de Stephane Chazelas:
Agora entendo que meus casos de uso acima funcionam apenas porque estou usando
bash
, no qualcd .
é equivalente acd "$PWD"
. Eu recomendo ler a resposta vinculada.fonte
Eu uso
cd .
para executar novamente as coisas que eu sobrecarregueicd
através de umabash
função.Do meu
~/.bashrc
:fonte
EDIT: Isso já foi sugerido por Sahil anteriormente.
Isso é útil se você estiver dentro de uma pasta que foi excluída e recriada por outro processo. Por exemplo, assumindo as duas sessões do terminal
$1
e$2
:Não sei se exatamente onde (SO, SHELL, ...?) Está a causa raiz desse comportamento.
fonte
Não, não tem sentido. Nem no script, ele simplesmente não faz nada.
fonte
$PWD
e possivelmente chamaria outras funções do shell se o usuário fornecesse sua própriacd
função ou alias para sobrecarregar o internocd
. Ele também verificaria se o diretório atual ainda é válido e se o uso atual tem permissão para estar lá.cd .
reclamará.