Qual é o significado de ./ antes de um determinado caminho?

25

Foi-me dito para executar isso:

./yiic message ./app/messages/config.php

Mas eu não entendo o ./significado, alguém pode esclarecer por favor.

Nota: Acredite, não podemos pesquisar no Google. Eu tentei:

./ significado ./ ubuntu

Era o mesmo que nada. :(

MEM
fonte
3
Nesses casos, o melhor é procurar por "barra", que deu esse resultado muito útil: linfo.org/dot_slash.html
heltonbiker

Respostas:

29

./ou apenas .é uma abreviação unix para o diretório atual.

Você precisa especificá-lo quando o diretório atual não estiver no seu PATH. O CAMINHO é a lista de pastas pesquisadas quando você executa um programa. (Você pode determiná-lo escrevendo echo $PATH.) Se um arquivo executável não estiver no seu PATH, para executá-lo, você precisará especificar a pasta em que está. Você pode fazer isso fornecendo o caminho completo para o arquivo, mas se o arquivo estiver em o diretório atual, você pode usar ./como abreviação.

Da mesma forma, ../ou apenas ..é uma abreviação para o diretório acima do atual.

frabjous
fonte
17
Alguém deve incluir em sua resposta por que $ PATH não contém .. Isso ocorre porque o uso automático do diretório atual é uma falha de segurança. Imagine alguém mais faz um programa, nomes que lse você cdem seu diretório, em seguida, digitels
Zan Lynx
1
@ Zan Eu sempre me perguntei isso, obrigado por sua resposta à pergunta que ninguém perguntou, mas alguém deveria ter.
crasic,
Ótimo comentário / adição ao @ZanLynx, ele deve ser editado na resposta, pois os comentários podem se perder.
NSGaga 06/0618
15

Todo diretório na linha de comando possui dois "diretórios especiais" chamados .e ... Estes são atalhos para, respectivamente, o diretório atual e o diretório que contém o diretório atual.

Por exemplo, cd ./more/directory/namesapenas significa "iniciar no diretório atual e continuar no caminho". Da mesma forma, o comando cd ..significa "altere um diretório para cima.

Se você deseja o nome do seu diretório atual, pode usar o pwdcomando Além disso, se você usar o -asinalizador para ls, poderá ver esses dois diretórios especiais. Ou seja, ls -aproduzirá uma lista começando com .e ...

Kris Harper
fonte
excelente root45 adição 1 :)
Rinzwind
4

Outros já explicaram o que .e o que ..significa (diretório atual e diretório pai, respectivamente). Isso se aplica a todos os nomes de caminho.

Quando você abre um terminal, geralmente inicia no diretório inicial: ~(que se expande para /home/username). Os caminhos abaixo são todos equivalentes, desde que o diretório de trabalho atual seja /home/username:

  • /home/username
  • .
  • ../username
  • ../../home/username
  • ../../../home/username(o diretório pai de /ainda está /)
  • ./././././. (o diretório atual no diretório atual no ...)
  • ./ (barras finais são permitidas para diretórios)
  • /home////username/// (e também várias barras)

Você não confundir ./programcom . program. ./programexecuta um arquivo no diretório atual com o bit de execução definido. . ./programé uma coisa do bash e, alternativamente, pode ser escrito, pois source ./programlê os comandos do programarquivo no diretório atual e os executa no shell atual.

Se você se pergunta por que simplesmente pode executar em geditvez de /usr/bin/gedite não em programvez de ./programou /home/username/program, consulte a pergunta relacionada:

Lekensteyn
fonte
3

Significa começar do current directory path .

Vamos supor que você tenha algo pathassim:

/usr/ /usr/bin/ /usr/local/bin

e por dentro /usr/bin/ existe um executável chamado yiic.

Se você emitir yiic , iniciaria o arquivo /usr/bin/.

Ao emitir, ./yiicvocê instrui o sistema a procurar dentro do diretório atual por este executável.

Rinzwind
fonte
Ok ... mas ainda não entendi. Digamos que eu tenha yiic por dentro /home/mysuser/e que eu navegue lá usando cd /home/myuser. Uma vez lá dentro, eu acreditava que fazer o yiic deveria funcionar porque eu liguei enquanto estava no diretório. Mas ele diz que o comando não arquiva. Se eu fizer o mesmo e usar o ./, ele funcionará corretamente ... Você pode esclarecer um pouco mais?
MEM
@frabjous como respondeu a este comentário também.
MEM
Não! ele sempre procurará na diretiva PATH, a menos que você diga para usar o diretório atual (usando ./). Olhe para a resposta do user45: .é um arquivo especial dentro de uma pasta que você pode ver ao fazer um ls -lano diretório;)
Rinzwind