Existe alguma diferença entre os caminhos “file” e “./file”?

12

Como o título diz, existe alguma diferença para os sistemas de arquivos * NIX? por exemplo, ls file e ls ./file

    
por Sergey Alaev 21.10.2016 / 21:55

2 respostas

14

Eu não sou louco pela explicação de SmallLoanOf1M. É tecnicamente correto, mas responde de uma forma que não corresponde ao exemplo de uso da pergunta.

Portanto, a título de exemplo, aqui está uma diferença importante entre os dois da questão: "file" e "./file"

E se o arquivo for nomeado com um caractere que é analisado pelo shell? Especialmente em relação aos caracteres interpretados pelo comando que está sendo executado.

Especificamente, o caractere "traço": "-". Mas outros personagens são significativos para o shell.

Exemplo. Meu arquivo foi chamado "-dingle"

Tente listar o arquivo:

ls -dingle
# ls -dingle
ls: invalid option -- 'e'

Ainda pior, e se o arquivo tiver o nome " -rf rmbomb * "? Agora tente removê-lo

rm "-rf rmbomb *"

Eu nem vou tentar usar esse exemplo, mas espero que você entenda.

Então, como você lista um arquivo olhando com traço? Use ./ na frente.

# ls ./-dingle
./-dingle

Idem para rm

    
por 21.10.2016 / 22:51
7

Sim.

Ao emitir file na linha de comando, o BASH pesquisará sua variável de ambiente $ PATH para um arquivo com esse nome. A menos que o arquivo resida em um diretório dentro de sua variável $ PATH, ele não será encontrado.

. significa o diretório atual. ./ significa dentro do diretório atual, em termos relativos. É o equivalente a dizer algo como /home/sheogorath/shivering/isles.img ao invocar ./isles.img enquanto trabalha no diretório /home/sheogorath/shivering/ .

Como tal, é comumente usado para executar arquivos em seu diretório de trabalho "in-loco".

EDITAR: No seu exemplo, ls está sendo chamado pelo shell e encontrado usando a variável path. Seu argumento será processado em seu diretório de trabalho, seja ele qual for. Como esse é o padrão para ls , você não verá qualquer diferença entre especificar file e especificar explicitamente ./file , pois ambos apontam para o diretório atual.

Nem todos os comandos aceitarão caminhos de arquivos no diretório de trabalho, e alguns esperam que você tenha arquivos de estado em um diretório que eles mesmos tenham predefinido por meio da configuração. Entre os comandos que aceitam arquivos como argumentos, esses comandos são menos comuns

    
por 21.10.2016 / 22:02