Usando o comando cd para navegar diretórios no Ubuntu que possuem caracteres especiais [duplicados]

12

Quando eu quero navegar em diretórios com caracteres especiais em seus nomes, recebo uma mensagem de erro.

Por exemplo:

aman@desktop:~/Aman$ cd !)e$!gn&(reate
bash: !: event not found
aman@desktop:~/Aman$ 

Aqui !)e$!gn&(reate é o nome do diretório onde eu quero navegar.

Como corrigir esse erro?

Como usar o comando cd para navegar em diretórios no Ubuntu com nome de diretório com caracteres especiais?

    
por Aman 23.04.2014 / 17:53

5 respostas

19

Esse erro está acontecendo porque o ! (bang) é um atalho que permite que você execute novamente um comando a partir do seu histórico. Ex: Este comando executa novamente o comando # 1504 da minha história.

$ !1504

Para evitar esse problema, tente encapsular o nome do seu diretório com aspas simples.

$ cd '!)e$!gn&(reate'

Dito isso, embora o Ubuntu (Linux) permita que você nomeie diretórios dessa forma, eu recomendaria strongmente contra ele. Usar caracteres especiais em nomes de diretório pode torná-los difíceis de ler e, se você estiver usando um caractere reservado, sempre precisará escapar ou encapsular o nome do diretório entre aspas.

    
por Aaron 23.04.2014 / 18:00
10

Você usa \ antes de caracteres especiais

cd \!\)e$\!gn\&\(reate

Você também pode colocar o nome da pasta inteiro entre aspas simples

cd '!)e$!gn&(reate'

Você pode encapsular o caminho inteiro entre aspas simples

cd 'Desktop/!)e$!gn&(reate'

se você quiser indicar um caminho dentro do diretório / home / username: basta adicionar ~/ antes do caminho entre aspas simples

cd ~/'Desktop/!)e$!gn&(reate'
    
por Back.Slash 23.04.2014 / 18:00
5

Interativamente, digite cd ! , em seguida, pressione Tab e o bash preencherá o resto, apropriadamente com escape.

    
por glenn jackman 23.04.2014 / 19:00
2

Não tenho certeza se isso se aplica a caracteres especiais, mas talvez coloque o caminho entre aspas duplas?

    
por bross 23.04.2014 / 19:29
2

Confirmando a resposta de @glenn jackman na prática, digitei cd ! e pressione [tab]

ianh@abe:~/tmp$ mkdir '!)e$!gn&(reate' ianh@abe:~/tmp$ cd \!\)e$\!gn\&\(reate/ ianh@abe:~/tmp/!)e$!gn&(reate$

Até mesmo criar um diretório com '! 1997' e digitar cd !1 e depois pressionar [tab] funcionou.

ianh@abe:~/tmp/!)e$!gn&(reate$ mkdir '!1997' ianh@abe:~/tmp/!)e$!gn&(reate$ cd \!1997/ ianh@abe:.../!)e$!gn&(reate/!1997$

(eu não tenho pontos de repetição suficientes para adicioná-lo como comentário)

    
por iheggie 24.04.2014 / 08:03