QNA > C > Come Fa Linux A Riconoscere Quale File Eseguibile Eseguire Per Primo Se Ce Ne Sono Più Di Uno?

Come fa Linux a riconoscere quale file eseguibile eseguire per primo se ce ne sono più di uno?

Si veda la documentazione delle chiamate di sistema execlp(2), execvp(2) ed execvpe(2).

In breve:

  • se l'argomento che specifica il percorso dell'eseguibile contiene una barra ("/"), guarda se c'è l'eseguibile nominato in quel percorso assoluto/relativo e usa quello, altrimenti fallisce;
  • altrimenti (se l'argomento non contiene una barra) scansiona ogni directory elencata nella variabile d'ambiente PATH finché non viene trovato un file eseguibile chiamato come quello specificato.

Per esempio:

  1. il percorso assoluto /bin/ls (assoluto perché inizia con una barra) indica il file eseguibile ls elencato nella directory /bin, e non c'è nessuna possibile ambiguità (poiché una directory non può elencare nomi di file duplicati);
  2. il percorso relativo foo/ls indica il file eseguibile ls nella sottodirectory foo della directory corrente. O c'è o non c'è;
  3. il nudo nome del comando ls viene cercato in ogni directory elencata nella variabile d'ambiente PATH (le directory sono separate da punto e virgola), finché non ne viene trovato uno. Si noti che la directory corrente non viene cercata a meno che non sia esplicitamente elencata in PATH (come un punto: ".").

    Un tipico valore per PATH potrebbe essere /sbin;/usr/sbin;/bin;/usr/bin;/usr/local/bin

Nota che MS-DOS funziona più o meno allo stesso modo, con l'importante eccezione che nel caso 3, viene cercata prima la directory corrente, e poi tutte le directory elencate nella variabile di ambiente PATH.

Di Phipps

Qual è la differenza tra EXD e EXE? :: Fino a quale distanza può funzionare la near field communication (NFC)?
Link utili