Concetti Chiave
- Se un comando contiene barre (/), viene interpretato come un percorso e la shell tenta di avviarlo come file eseguibile.
- Se il comando non ha barre, la shell verifica se esistono funzioni o comandi interni corrispondenti prima di cercare nel percorso specificato da PATH.
- In caso di ricerca fallita, la shell restituisce un errore e un valore di uscita diverso da zero.
- Quando viene trovato un eseguibile esterno, la shell lo avvia con gli argomenti forniti nella riga di comando.
- Se il comando è uno script di shell, viene eseguito in una subshell e, se inizia con #!, viene interpretato dal programma specificato nella prima riga.
Esecuzione di comandi con barre
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.
Avvio di eseguibili esterni
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.
Esecuzione di script di shell
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
- Cosa succede quando un comando contiene una barra (/) nel suo nome?
- Quali sono i passaggi che la shell esegue se un comando non contiene barre?
- Come viene gestita l'esecuzione di uno script di shell?
Se un comando contiene una o più barre, viene interpretato come un percorso del file system e la shell tenta di avviare il file eseguibile corrispondente.
Se il comando non contiene barre, la shell verifica se esiste una funzione di shell o un comando interno con quel nome; in caso contrario, cerca nel percorso di ricerca degli eseguibili definito nella variabile PATH.
Se il comando non è un programma né una directory, viene considerato uno script di shell e viene eseguito in una subshell, con una configurazione simile a quella di una nuova shell. Se il file inizia con #!, viene interpretato dal programma specificato nella prima riga.