KingDragonMan
Ominide
2 min. di lettura
Vota 3 / 5

Concetti Chiave

  • Se il comando contiene una barra (/), viene interpretato come un percorso nel file system e la shell tenta di avviarlo come un file eseguibile.
  • Se il comando non contiene barre, la shell verifica se esiste una funzione di shell o un comando interno con quel nome.
  • Se non si trova un comando interno o una funzione, la shell lo cerca nella variabile PATH; se fallisce, viene segnalato un errore.
  • Quando viene trovato un eseguibile esterno, la shell lo avvia configurando gli argomenti secondo lo standard.
  • Se il comando è uno script di shell o un file di testo con #!, viene eseguito attraverso una subshell o il programma specificato.
L'esecuzione dei comandi
Dopo che un comando è stato suddiviso in parole, se il risultato è quello di un comando singolo, con eventuali argomenti, vengono eseguite le azioni seguenti.

Se il nome del comando contiene una o più barre (/), questo viene inteso essere un percorso del file system e di conseguenza il comando è inteso riferirsi precisamente a un file eseguibile, per cui la shell tenta di avviarlo.

Se il nome del comando non contiene alcuna barra (/):

se esiste una funzione di shell con quel nome, questa viene eseguita (purché sia disponibile la gestione delle funzioni);

se esiste un comando interno con quel nome, questo viene eseguito;

viene cercato all'interno del percorso di ricerca degli eseguibili contenuto nella variabile PATH.

Se la ricerca fallisce si ottiene una segnalazione di errore e la restituzione di un valore di uscita diverso da zero.

Quando la shell ha determinato che si tratta di un eseguibile esterno ed è riuscita a trovarlo, vengono eseguite le azioni seguenti.

La shell tenta di avviarlo.

La shell avvia il programma configurando gli argomenti nel modo consueto: il primo, cioè zero, contiene il nome del programma, quelli successivi, contengono gli argomenti forniti eventualmente nella riga di comando.

Se non si tratta di un programma e nemmeno di una directory (in tal caso verrebbe comunque emessa una segnalazione di errore), viene inteso essere uno script di shell. In tal caso viene generata una subshell per la sua esecuzione, la quale si reinizializza in modo da presentare allo script una situazione simile a quella di una nuova shell.

Se il programma è un file di testo che inizia con #!, si intende che si tratti di uno script che deve essere interpretato attraverso il programma indicato nella parte restante della prima riga. La shell esegue quindi quel programma dando come argomenti il nome dello script e altri eventuali argomenti ricevuti nella riga di comando originale.

Domande da interrogazione

  1. Come viene gestito un comando che contiene una barra (/) nel nome?
  2. Se il nome del comando contiene una o più barre (/), viene inteso come un percorso del file system e la shell tenta di avviarlo come un file eseguibile.

  3. Cosa succede se un comando non contiene barre (/) e non viene trovato?
  4. Se un comando non contiene barre (/) e non viene trovato, si ottiene una segnalazione di errore e la restituzione di un valore di uscita diverso da zero.

  5. Come viene eseguito uno script di shell?
  6. Uno script di shell viene eseguito generando una subshell che si reinizializza per presentare una situazione simile a quella di una nuova shell, e se inizia con #!, viene interpretato attraverso il programma indicato nella prima riga.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community