Quando quero voltar ao diretório de nível superior no Linux, digitando cd ..
, digitei cd //
. Para minha grande surpresa, nenhum erro foi relatado. Além disso, o prompt se torna username@hostname://$
. ls
indica que agora estou no diretório raiz.
Isso é um bug ou um recurso do shell? Se um recurso, é //
um alias de /
? Meu shell é o GNU bash, versão 4.1.5 (1) -release (i686-linux-gnu).
Obrigado e cumprimentos.
Respostas:
Também pode ser considerado.
No Linux, isso
//
não significa nada - várias barras consecutivas são reduzidas a uma, em qualquer lugar do caminho, incluindo o início. Mudar o diretório para//
colocar você/
, comoreadlink /proc/self/cwd
diria a execução ; da mesma forma,/usr//local///bin
está recolhido/usr/local/bin
.No entanto, alguns outros sistemas semelhantes ao Unix, por exemplo, Cygwin ou o antigo Apollo Domain / OS, usam o
//
prefixo para caminhos de rede como//fileserver/path/to/data
. O POSIX também permite isso.Por várias razões, o shell bash rastreia o diretório atual por conta própria (além do rastreamento fornecido pelo sistema operacional) e possui um código que impede que a inicial
//
seja recolhida, para permanecer compatível com esses sistemas. O "recurso" é que o bash fornece um rastreamento mais intuitivo do diretório atual, por exemplo, aocd
entrar em um link simbólico, o bash mostrará o caminho que você espera, mesmo que o kernel pense de outra forma. O "bug" é que o bash permite//
mesmo em sistemas que não o usam.fonte
zsh
permitecd //
, mas é inteligente o suficiente para mostrar apenas/
na string de prompt.Na definição do nome do caminho POSIX:
Fonte
E mais precisamente como a gravidade mencionada em seu comentário abaixo, no capítulo 4.11 sobre a resolução do nome do caminho:
fonte
É um tipo de recurso. Se você tem um script de shell em uso e
find
, por exemplo, todos os caminhos são prefixados com ./ normalmente. Então, se você colocar isso em um caminho real, ele se tornará `/my/path/./appended/path, que será resolvido em / my / path / appended / path. Portanto, se não me engano, // get é interpretado como /./ e, portanto, /. É o mesmo para se você fosse para / home / user //, terminaria em / home / user /fonte
Eu iria para o prompt exibindo "bug".
Os caminhos "/", "//", "//////////////////////", ... têm o mesmo significado: "/". Você pode adicionar quantos "/" onde quiser em um caminho Unix, isso não muda seu significado.
O "bug" está mais relacionado ao fato de que seu prompt usa o último caminho digitado válido válido para exibição, não o "pwd" real.
Engraçado de qualquer maneira;)
fonte
//
no prompt é um efeito colateral da sua variável de ambiente de prompt ($PS1
) - como éPS1
definido?$PS1
variável é definida como[\u@\h \W]\$
. Algum problema com a configuração?/
quando pwd =/
. Gostaria de saber se você estava fazendo algum trabalho extra para obter o diretório. Está$PROMPT_COMMAND
definido?echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"
. Você poderia explicar um pouco mais detalhadamente? Não estou familiarizado com essas duas variáveis. Obrigado.PS1
ePROMPT_COMMAND
- usoman bash
em sua linha de comando ou lido onlineÉ um Recurso e todos os múltiplos // serão substituídos por um único /
É útil se você tiver variáveis com caminhos como o exemplo no final. Portanto, seu CD não receberá nenhum erro e você não precisará alterar a variável da área de trabalho.
o conteúdo completo da variável do projeto é
fonte