Qual è il significato di ./ prima di un determinato percorso?


25

Mi è stato detto di eseguire questo:

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

Ma non capisco il ./significato, qualcuno può chiarire per favore.

Nota: credetemi, non possiamo cercarlo su Google. Ho provato:

./ significato ./ ubuntu

Era lo stesso di niente. :(


3
In questi casi, il migliore è cercare "dot slash", che ha dato questo risultato molto utile: linfo.org/dot_slash.html
heltonbiker

Risposte:


29

./o semplicemente .è la scorciatoia unix per la directory corrente.

È necessario specificarlo quando la directory corrente non si trova nel PERCORSO. Il PERCORSO è l'elenco delle cartelle cercate quando si esegue un programma. (È possibile determinarlo scrivendo echo $PATH.) Se un file eseguibile non si trova nel PERCORSO, per eseguirlo è necessario specificare la cartella in cui si trova. È possibile farlo fornendo il percorso completo del file, ma se il file è in la directory corrente, è possibile utilizzare ./come scorciatoia.

Allo stesso modo, ../o semplicemente ..è una scorciatoia per la directory sopra quella corrente.


17
Qualcuno dovrebbe includere nella propria risposta il motivo per cui $ PATH non contiene .. È perché l'utilizzo automatico della directory corrente è un buco nella sicurezza. Immagina che qualcun altro faccia un programma, lo chiami lse tu cdnella sua directory, quindi digitals
Zan Lynx,

1
@Zan Mi sono sempre chiesto questo, grazie per la tua risposta alla domanda che nessuno ha posto, ma qualcuno dovrebbe avere.
Crasic,

@ZanLynx ottimo commento / aggiunta, dovrebbe essere modificato nella risposta poiché i commenti possono perdersi.
NSGaga,

15

Ogni directory nella riga di comando ha due "directory speciali" chiamate .e ... Questi sono abbreviazioni rispettivamente per la directory corrente e la directory contenente la directory corrente.

Quindi, ad esempio, cd ./more/directory/namessignifica semplicemente "iniziare dalla directory corrente e continuare nel percorso". Allo stesso modo, il comando cd ..significa "modifica una directory su.

Se si desidera il nome della directory corrente, è possibile utilizzare il pwdcomando. Inoltre, se usi la -abandiera per ls, puoi vedere queste due directory speciali. Cioè, ls -averrà visualizzato un elenco che inizia con .e ...


eccellente aggiunta root45 +1 :)
Rinzwind

4

Altri hanno già spiegato cosa .e quali ..mezzi (rispettivamente directory attuale e directory principale). Questo vale per tutti i nomi di percorso.

Quando apri un terminale, di solito inizi nella tua home directory: ~(che si espande in /home/username). I percorsi seguenti sono tutti equivalenti, a condizione che la directory di lavoro corrente sia /home/username:

  • /home/username
  • .
  • ../username
  • ../../home/username
  • ../../../home/username(la directory principale di /è ancora /)
  • ./././././. (la directory corrente nella directory corrente in ...)
  • ./ (le barre finali sono consentite per le directory)
  • /home////username/// (e così sono più barre)

Da non confondere ./programcon . program. ./programesegue un file nella directory corrente con il bit di esecuzione impostato. . ./programè una cosa bash e può in alternativa essere scritta come source ./programlegge i comandi bash dal programfile nella directory corrente e li esegue nella shell corrente.

Se ti chiedi perché puoi semplicemente eseguire geditinvece di /usr/bin/gedite non programinvece di ./programo /home/username/program, vedi la domanda correlata:


3

Significa iniziare dal current directory path.

Supponiamo che tu abbia un pathsimile a questo:

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

e dentro /usr/bin/c'è un eseguibile chiamato yiic.

Se si emette yiic, si avvierà quello in /usr/bin/.

Rilasciando ./yiicdici al sistema di cercare nella directory corrente questo eseguibile.


Ok ... ma ancora non capisco. Diciamo che ho yiic dentro /home/mysuser/e che ci navigo usando cd /home/myuser. Una volta dentro, credevo che facendo semplicemente yiic, avrebbe dovuto funzionare perché l'ho chiamato mentre ero su quella directory. Ma dice che il comando non è un file. Se faccio lo stesso e uso il ./, allora funziona correttamente ... Puoi chiarire un po 'di più?
MEM,

@frabjous ha risposto anche a questo commento.
MEM,

No! cercherà sempre nella direttiva PATH a meno che tu non gli dica di usare la directory corrente (usando ./). Guarda la risposta di user45: .è un file speciale all'interno di una cartella che puoi vedere quando fai un ls -lanella directory;)
Rinzwind
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.