Como posso escrever espaço no Terminal no OS X?

7

Eu tenho o nome da pasta com um espaço entre as palavras. Eu uso um comando cd que eu posso para mover em uma pasta de necessidade. Como posso escrever espaço no Terminal no OS X? Eu tentei seguir

MacBook-Pro:TestDrop Alexsander$ cd October Fall
-bash: cd: October: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd OctoberFall
-bash: cd: OctoberFall: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October/ Fall
-bash: cd: October/: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October/Fall
-bash: cd: October/Fall: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October-Fall
-bash: cd: October-Fall: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October_Fall
    
por Alexander 03.10.2015 / 17:14

2 respostas

24

O motivo pelo qual ele não funciona é porque o shell divide os argumentos no espaço em branco e, portanto, pensa que você chama cd com os dois argumentos October e Fall . Escape o espaço em branco com \ assim:

cd October\ Fall

Outra maneira é colocá-lo em aspas simples ou duplas como esta

cd 'October Fall'
cd "October Fall"

Ou simplesmente arraste e solte a pasta no Terminal.

Mas por que você não digita apenas alguns caracteres e pressiona a tecla Tab para completar automaticamente?

    
por 03.10.2015 / 17:18
10

O shell realiza divisão de palavras nos argumentos antes de passá-los para o comando especificado. Isso significa que ele pega a linha (ou, em alguns casos, as linhas) e o separa em várias palavras, por padrão em espaços, tabulações e novas linhas.

Como Lưu Vĩnh Phúc mencionou, barras invertidas e aspas simples podem ser usadas para evitar a divisão de palavras em caracteres únicos ou tudo entre eles, respectivamente. Aspas duplas também funcionam:

cd "October Fall"

Neste caso específico, ' e " se comportam de maneira idêntica, mas eles têm diferenças .

' desativa todas as interpretações de caracteres especiais (até \ ), mas não pode conter ' . " apenas desativa a divisão de palavras ea expansão do nome do arquivo (a expansão do nome do arquivo é como ls *.mp3 para listar todos os arquivos com nomes terminados em .mp3 . O * aciona a expansão do nome do arquivo aqui). Como " permite algumas expansões de argumentos, é útil se, por exemplo, você tiver um nome de arquivo com um espaço dentro de uma variável:

$ filename=October\ Fall
$ #               ^-- Still need a backslash or quoting to prevent word 
$ #                   splitting here, but the backslash/quotes will not be stored
$ cd $filename
bash: cd: October: No such file or directory
$ cd '$filename'
bash: cd: $filename: No such file or directory
$ cd "$filename"
$ pwd
/path/to/October Fall

Observe que ' e " não (por padrão) fazem com que a palavra seja dividida, por isso, apesar de ser confuso, funcionaria para você:

cd "Oct"'ober F'"all"

Isso é útil se você tiver algo como um diretório chamado Octobers' $HOME . O ' dividiria um único par de ' , e dentro de " quotes, $HOME será expandido para seu diretório inicial. Mas qualquer uma dessas combinações (e muitas outras) funcionará com segurança:

cd Octobers\'\ \$HOME
cd "Octobers' "'$HOME'
cd "Octobers' "\$HOME
cd "Octobers' \$HOME"

Outra coisa a ter em mente é que muitos shells modernos oferecem conclusão de tabulação. Bash e Zsh (provavelmente também o Ksh, mas eu não testei) podem expandir parte do nome de um diretório para o seu nome completo, completo com escape seguro através de \ s. Então, cd Octobers<tab> se torna cd Octobers\'\ \$HOME . Você pode ter que pressionar a guia várias vezes se houver várias correspondências. Além disso, seu shell pode não ter a conclusão da tabulação ativada por padrão, verifique a documentação do seu shell.

    
por 03.10.2015 / 19:53