Estou usando o Bash no macOS X e gostaria de criar um arquivo de script executável simples que mudaria para outro diretório quando fosse executado. No entanto, o caminho para esse diretório contém espaços. Como diabos você faz isso? Isso é o que eu tenho ...
Nome do arquivo: cdcode
Conteúdo do arquivo:
cd ~/My Code
Agora, concedido, este não é um nome de caminho longo, mas meu nome de caminho real tem cinco diretórios e quatro desses diretórios têm espaços no caminho.
BTW, eu tentei cd "~/My Code"
e cd "~/My\ Code"
e nenhuma delas funcionou.
Respostas:
Quando você faz aspas duplas de um caminho, está interrompendo a expansão do til. Portanto, existem algumas maneiras de fazer isso:
O til não é citado aqui, então a expansão do til ainda será executada.
Você pode expandir as variáveis de ambiente dentro de strings com aspas duplas; isso é basicamente o que a expansão do til está fazendo
Você também pode escapar de caracteres especiais (como espaço) com uma barra invertida.
fonte
Encontrei a solução abaixo nesta página :
Uma combinação de
\
uma constante de texto entre aspas duplas e umeval
beforecd
faz com que funcione como um encanto!fonte
eval
aqui.eval
.parece funcionar para mim ... Se ignorar as aspas, mas manter a barra não funcionar, você pode postar algum código de amostra?
fonte
Você pode usar qualquer um dos seguintes:
Você não pode usar:
O primeiro funciona porque o shell expande ~ / em $ HOME / e, em seguida, segue Meu Código sem as aspas duplas. A segunda falha porque não há um usuário chamado '
"
' (aspas duplas) para~"
mapear.fonte
Depois de lutar com o mesmo problema, tentei duas soluções diferentes que funcionam:
1. Use aspas duplas (
""
) com suas variáveis.A maneira mais fácil de fazer aspas duplas em suas variáveis, conforme apontado na resposta anterior:
2. Faça uso de
eval
.De acordo com esta resposta, o comando Unix para escapar de espaços, você pode retirar o espaço em branco e usá-lo
eval
, assim:fonte
Uma única barra invertida funciona para mim:
Tem certeza de que o problema não é que seu script de shell está mudando de diretório em seu subshell, mas você está de volta no shell principal (e no diretório original) quando terminar? Evitei isso usando. para executar o script no shell atual, embora a maioria das pessoas usaria apenas um alias para isso. Os espaços podem ser uma pista falsa.
fonte
Evite ~ em scripts; use $ HOME em vez disso.
fonte
Ao trabalhar no Linux, a sintaxe abaixo é correta:
cd ~/My\ Code
No entanto, ao executar seu arquivo, use a sintaxe abaixo:
$ . cdcode
(apenas '.' e não './')
fonte
use aspas duplas
fonte
.bashrc
arquivo para alterar o diretório ao colar nomes de diretório que contenham espaços na linha de comando sem ter que escapar dos espaços ou citar tudo.cds
é um nome melhor embora.go
seja equivalente acd
, ou seja, cd para o diretório inicial?A maneira muito simples de fazer isso é-
No bash, execute o comando DIR e nos resultados você verá que os nomes da pasta ou do caminho com espaço entre eles foram escritos nos resultados como este -
fonte
Isso vai resolver:
Eu tive que usar isso para trabalhar com arquivos armazenados no iCloud Drive. Você não vai querer usar aspas duplas ("), pois o caminho deve ser absoluto. Em outras palavras, você não pode combinar aspas duplas com til (~).
A título de exemplo, tive que usar isso para um projeto recente:
Espero que ajude.
fonte
Eu tive um problema semelhante agora, estava usando um script bash para despejar alguns dados. Acabei criando um link simbólico na pasta de script sem nenhum espaço nele. A seguir, apontei meu script para o link simbólico e funcionou bem.
Para criar seu link. ln -s [DIRETÓRIO OU ARQUIVO DE ALVO] ./[SHORTCUT]
Mau ou não pode ser útil.
fonte
Use aspas simples, como:
fonte