Como cd em um diretório com este nome "-2" (começando com o hífen)?

169

Eu tenho um diretório chamado:

-2

Quero entrar nele, mas o CD reclama:

bash: cd: -2: invalid option

Sem sucesso, tentei:

cd "-2"
cd '-2'
cd \-2

Qualquer solução?

Editar: não há navegadores de arquivos como mc, etc. disponíveis no servidor.

user151851
fonte
2
Pergunta relacionada ao superusuário: superuser.com/questions/361573/…
yms

Respostas:

272

Pelo menos duas maneiras:

  1. Use o --argumento

    cd -- -2
    

    Isso usa uma convenção comum às ferramentas GNU, que é não tratar nada que aparece depois --como uma opção de linha de comando.

    Como comentador observou, esta convenção também é definida no padrão POSIX :

    Comportamento padrão: quando esta seção está listada como "Nenhuma", significa que a implementação não precisa oferecer suporte a nenhuma opção. Utilitários padrão que não aceitam opções, mas que aceitam operandos, devem reconhecer "--"como o primeiro argumento a ser descartado.

    O requisito para reconhecer "--"é porque os aplicativos em conformidade precisam de uma maneira de proteger seus operandos de quaisquer opções arbitrárias que a implementação possa fornecer como uma extensão. Por exemplo, se o utilitário foo padrão estiver listado como não tendo opções e o aplicativo necessário para fornecer um nome de caminho com um hífen à esquerda, ele poderá fazê-lo com segurança como:

    foo -- -myfile
    

    e evite qualquer problema com -m usado como uma extensão.

    bem como :

    Diretriz 10:
    O argumento --deve ser aceito como um delimitador indicando o final das opções. Quaisquer argumentos a seguir devem ser tratados como operandos, mesmo se começarem com o '-'caractere. O --argumento não deve ser usado como uma opção ou como um operando.

  2. Especifique o caminho explicitamente:

    cd ./-2
    

    Isso especifica o caminho que nomeia explicitamente o diretório atual ( .) como o ponto de partida.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Essas são variações do que foi dito acima. Qualquer número dessas variações pode ser possível; Vou deixar como um exercício para o leitor descobrir todos eles.

Michael Hampton
fonte
23
Não é apenas o GNU, é parte do padrão POSIX. Consulte 1.11 Padrões de descrição do utilitário e 12.2 Diretrizes de sintaxe do utilitário (diretriz 10). Na cdpágina "O cdutilitário deve estar em conformidade com ... seção 12.2".
Dietrich Epp
Agora estou curioso para saber como fazer o cd para um diretório chamado -!
sergiol 4/13
2
@sergiol Da mesma maneira.
Michael Hampton
1
@ArtB: Não. A citação afeta apenas a divisão de campos. Então, "hello world"é um argumento, mas hello worldé dois, e "-2"é o mesmo que -2.
precisa saber é o seguinte
1
@sergiol: Ou deve cd -- --ou cd ./--deve funcionar.
Keith Thompson
49

Isso deve funcionar:

cd -- -2 

- significa que não há mais opção

Tim Haegele
fonte
26

Isso funcionará se '-2' estiver no diretório atual.

    cd ./-2

Você pode concluir automaticamente digitando - e pressionando tab.

newbee
fonte
11

cd /home/...../-2 também funciona. Dê o caminho completo para acessar.

Vivek
fonte
7

Apenas para complementar, se você deseja remover / excluir este diretório, pode usar o seguinte comando:

rm -r -- -2
Zignd
fonte
... e apenas para complementar, eu nunca faria isso; em vez disso, usarei uma ferramenta gráfica como mc ou renomeará o diretório primeiro.
Nick
-1

Eu sei que esta pergunta já foi respondida. Se alguém tem uma situação como a minha, é para eles:

Eu executei um aplicativo java e ele estava procurando um diretório começando por <path>, deveria substituí-lo pelo caminho adequado antes de executar o aplicativo. No entanto, eu esqueci de fazer isso. O aplicativo criou um diretório chamado <path>.

Eu tentei cd <path>- me deu o erro "-bash: erro de sintaxe perto de uma nova linha de token inesperada" Com base na sugestão aqui (eu entendo que é para o diretório que começa com - e não <) eu tentei cd -- <path>. No entanto, eu recebi o mesmo erro.

Quando eu tentei cd \<path>\- isso funcionou!

Informações básicas:

Os símbolos "<" e ">" são usados ​​para redirecionar STDIN e STDOUT; portanto, eles precisam ser escapados para que o shell não os interprete como redirecionamentos.

Jobin Thomas
fonte