Qual é o propósito / benefício de colocar “./” no início de um caminho? [duplicado]

1

Existe algum benefício em preceder um caminho com ./ (barra de pontos)?

Na maioria dos casos, cd ./home é equivalente a cd home (e também cd ./././././home ). Existe algum caso em que esses dois caminhos NÃO avaliem o mesmo caminho? Existe algum benefício ou desvantagem de ter ou NÃO ter ./ no início de uma pasta ou caminho de arquivo?

E se, dentro de um programa ou script, eu quisesse abrir um arquivo de configuração, seria difícil codificar um arquivo para abrir, se fosse:

resource/config.txt

OR

./resource/config.txt

O POSIX (ou implementações comuns do Unix) fornece alguma diferença semântica entre abrir esses dois caminhos?

    
por kevlarjacket 14.12.2016 / 22:27

3 respostas

4

Há pelo menos dois motivos para fazer ./something .

  1. Você tem um programa que deseja executar. É inconvenientemente chamado algo como "teste" ou "gato" ou "ps". Normalmente, os shells procuram nomes de programas em diretórios na variável de ambiente PATH . Para executar seu test , você deve digitar ./test , caso contrário, /usr/bin/test ou algum desses será executado. Isso pode ser muito confuso.

  2. Você não tem . em sua variável de ambiente PATH porque não deseja executar acidentalmente um programa enquanto estiver mexendo no sistema de arquivos. Pessoas realmente horríveis podem deixar um script ls em algum diretório. O arquivo ls pode conter rm -rf $HOME . Se o seu PATH tiver "." no lugar certo, a pessoa horrível pode ser capaz de induzi-lo a deletar tudo em seu diretório pessoal. Você pode certamente colocar "." como a última entrada em PATH , mas é possível criar circunstâncias em que "." em PATH causa problemas. Portanto, para executar um programa cujo executável resida no diretório de trabalho atual, você deve prefixar o nome do arquivo com "./".

por 14.12.2016 / 22:58
3

./ é de fato sempre o diretório de trabalho atual. No entanto, é (por um bom motivo) geralmente não adicionado ao PATH . Isso significa que, se você tiver um script ou binário em seu diretório de trabalho atual que deseja executar, será necessário usar ./script.sh em vez de script.sh para ser executado.

    
por 14.12.2016 / 22:48
2
vagrant@host:~$ pwd
/home/vagrant
vagrant@host:~$ mkdir foobar
vagrant@host:~$ mkdir foobar/~
vagrant@host:~$ cd foobar
vagrant@host:~/foobar$ cd ./~
vagrant@host:~/foobar/~$ pwd
/home/vagrant/foobar/~
vagrant@host:~/foobar/~$ cd ~
vagrant@host:~$ pwd
/home/vagrant
vagrant@host:~$ cd foobar
vagrant@host:~/foobar$ cd ~
vagrant@host:~$ pwd
/home/vagrant
vagrant@host:~$ 

Como @DopeGhoti @Wildcard e outros indicaram, às vezes é útil ser bem específico sobre qual diretório você está e qual é o seu alvo. As construções ./ e ../ fornecem isso.

    
por 14.12.2016 / 22:48