Qual è la differenza tra filename
e ./filename
? In quali circostanze uno è preferito all'altro?
Qual è la differenza tra filename
e ./filename
? In quali circostanze uno è preferito all'altro?
Risposte:
Per i file di dati, non fa differenza: entrambe le istruzioni faranno riferimento al file di dati nella directory corrente. (Ad esempio, cat filename
e cat ./filename
sono semanticamente identici.)
È una storia diversa se il nome file in questione si riferisce a un eseguibile , ovvero è la prima (o anche unica) cosa che digiti sulla riga di comando. ./filename
cercherà il file eseguibile nella directory corrente e da nessun'altra parte. filename
, D'altra parte, valuterà la variabile d'ambiente PATH
, e cercare filename
in ogni directory in esso memorizzati (che potrebbe o non potrebbe includere la directory corrente).
./filename
(o qualsiasi altro /path/to/filename
) è quindi preferito quando si desidera eseguire un eseguibile specifico , non il primo trovato nel PERCORSO.
Se stai eseguendo un programma, filename
dice di eseguire il primo trovato nel tuo $PATH
e il secondo dice di eseguire quello nella directory corrente.
Se stai usando quel nome di file come argomento per un programma come in do_something filename
o do_something ./filename
allora significano la stessa cosa.
Ti riferisci all'esecuzione del comando, giusto?
Esiste una variabile di ambiente PATH
che contiene alcune directory di sistema, delimitate da punto e virgola. Quando si digita command
il sistema cerca in queste directory nell'ordine in cui sono specificate per trovare un file eseguibile chiamato <command> Se lo trova, tenta di eseguirlo. Puoi vedere il tuo PERCORSO via echo $PATH
in bash. Per esempio:
$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin
Durante la digitazione ./filename
si specifica il percorso esatto: la directory corrente. Puoi vedere che la directory corrente è raramente nel tuo $ PATH (per motivi di sicurezza). Quindi, se si desidera eseguire un file dalla directory corrente, si utilizza ./filename
.
Per eseguire un file dal suo percorso (specialmente se non è in $ PATH) puoi anche digitare <path>/file
, come:
/ Sbin / ifconfig
La sicurezza eseguibile è la ragione principale di questa differenza.
Tu non vuoi . (presente directory di lavoro o PWD) nel tuo percorso perché qualcuno potrebbe trojan http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 un eseguibile cruciale come ps o ls nel tuo PWD e ingannarti presentando dati errati.
Dipende da quali circostanze lo stai usando.
Come argomento, ad esempio "nome file del programma", dipende dal programma, ma generalmente sono identici.
Come nome del programma, ad es. "Argomenti nomefile", quindi "argomenti nomefile" cercherà il PERCORSO per trovare il binario, mentre "./argomento argomenti nomefile" utilizzerà il programma nella directory corrente. Questo è ovviamente utile se. non è nel PERCORSO, ma è anche utile usarlo anche se. è nel percorso, forse perché corrisponde a una voce precedente.