Capitolo successivo Capitolo precedente Indice

27. Bash - comandi interni

I comandi interni sono quelli eseguiti direttamente dalla shell, come se si trattasse di funzioni. La tabella (seguente) mostra l'elenco dei comandi a disposizione.


Comando Descrizione
sh : Non fa nulla: esegue solo una simulazione di espansione e ridirezione.
. Legge ed esegue i comandi di un file indicato come argomento.
break Termina un ciclo for, while o until.
cd Cambia la directory corrente.
continue Riprende la prossima iterazione di un ciclo for, while o until.
eval Concatena ed esegue gli argomenti come un unico comando.
exec Esegue un comando rimpiazzando la shell.
exit Termina il funzionamento della shell.
export Marca le variabili in modo che siano passate all'ambiente dei processi figli.
getopts Analizza le opzioni dagli argomenti di uno script o funzione.
hash Determina e memorizza i pathname completi dei programmi indicati.
kill Invia un segnale a un processo.
pwd Emette il percorso della directory attuale.
readonly Protegge le variabili contro la scrittura.
return Termina una funzione restituendo un valore preciso.
shift Fa scalare verso sinistra il contenuto dei parametri posizionali.
test Valuta una espressione condizionale.
times Emette i tempi di utilizzo accumulati.
trap Specifica i comandi da eseguire quando la shell riceve segnali.
umask Determina la maschera di creazione dei file.
unset Elimina le variabili.
wait Attende la conclusione dei processi figli.
csh pushd Salva la directory corrente.
popd Estrae una directory precedentemente salvata.
dirs Elenca le directory memorizzate.
history Emette l'elenco dei comandi memorizzati nello storico.
logout Termina l'esecuzione di una shell di login
source Esegue la stessa funzione di ..
ksh fc Recupera dei comandi dallo storico.
let Esegue dei calcoli.
alias Crea un alias di un comando.
unalias Elimina un alias di un comando.
bash builtin Esegue un comando interno in modo esplicito.
bind Visualizza o modifica la configurazione della tastiera.
command Esegue un comando interno o un programma.
declare Dichiara delle variabili.
echo Emette gli argomenti attraverso lo standard output.
enable Abilita o disabilita dei comandi interni.
help Emette informazioni sui comandi interni.
local Crea delle variabili locali.
logout Termina l'esecuzione di una shell di login.
read Legge una riga dallo standard output e lo assegna a una variabile.
type Determina il tipo di comando.
ulimit Fornisce il controllo sulle risorse disponibili.
set Configura una grande quantità di elementi.
shopt Attiva o disattiva alcune opzioni di shell.
Elenco dei comandi interni di bash. L'elenco è classificato in base all'origine storica.

27.1 Comandi interni in ordine alfabetico

Nelle sezioni seguenti sono descritti i comandi interni di bash in ordine alfabetico.

:

:[<argomenti>]

Ciò che inizia con il simbolo : non viene eseguito. Si ottiene solo l'espansione degli argomenti e l'esecuzione della ridirezione. Il valore restituito alla fine è sempre zero.

.

. <file-script> [<argomenti>] | source <file-script> [<argomenti>]

Vengono letti ed eseguiti i comandi contenuti nel file indicato. Se il nome del file non fa riferimento a un percorso, questo viene cercato all'interno dei vari percorsi indicati all'interno della variabile PATH. Se vengono forniti degli argomenti a questo script, questi diventano i relativi parametri posizionali. Il valore restituito dallo script è:

alias

alias [<nome>[=<valore>]... ]

Il comando alias senza argomenti, emette attraverso lo standard output la lista degli alias nella forma <nome>=<valore>. Se non viene indicato il valore dell'alias, ne viene emesso il nome e il contenuto. La coppia <nome>=<valore> deve essere scritta senza lasciare spazi prima e dopo del segno =. In particolare, se si lascia uno spazio prima dell'indicazione del valore, questo verrà interpretato come il nome di un altro alias. Il comando alias restituisce il valore vero a meno che non sia stato indicato un alias inesistente senza valore da assegnare, nel qual caso restituisce falso.

bg

bg [<specificazione-del-job>]

Mette in background il job indicato, come se fosse stato avviato con un & finale. Se non viene indicato il job, viene messo in background quello corrente, dal punto di vista della shell. Se l'operazione riesce, il valore restituito è zero.

Il controllo sui job è descritto nella sezione `Controllo dei job'.

bind

bind [-m <mappa-dei-tasti>] [-ldv] [-q <funzione>]

bind [-m <mappa-dei-tasti>] -f file

bind [-m <mappa-dei-tasti>] <sequenza-di-tasti>:<funzione>

Visualizza o modifica la configurazione legata all'uso della tastiera attraverso la libreria readline. La sintassi è la stessa di quella utilizzata per il file di configurazione ~/.inputrc.

Opzioni

-m <mappa-dei-tasti>

Usa la mappa della tastiera indicata per nome. I nomi a disposizione sono: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command e vi-insert. In particolare, vi equivale a vi-command e emacs equivale a emacs-standard.

-l

Elenca i nomi di tutte le funzioni di readline.

-v

Elenca i nomi delle funzioni attuali e i loro collegamenti.

-d

Scarica i nomi delle funzioni e i collegamenti in modo che possano essere riletti.

-f file

Legge le informazioni legate all'uso della tastiera dal file indicato.

-q <funzione>

Emette la sequenza di tasti connessa con la funzione indicata.

Il valore restituito è zero, a meno che non siano fornite opzioni sconosciute.

break

break [n]

Interrompe un ciclo for, while o until. Se viene specificato il valore numerico n, l'interruzione riguarda n livelli. Il valore n deve essere maggiore o uguale ad 1. Se n è maggiore dei cicli annidati in funzione, vengono semplicemente interrotti tutti. Il valore restituito è zero, a meno che non ci sia alcun ciclo da interrompere.

builtin

builtin <comando-interno> [<argomenti>]

Esegue il comando interno indicato passandogli gli eventuali argomenti. Può essere utile quando si vuole definire una funzione con lo stesso nome di un comando interno. Restituisce il valore falso se il nome indicato non corrisponde a un comando interno.

cd

cd [<directory>]

Cambia la directory corrente. Se non viene specificata la destinazione, si intende la directory contenuta nella variabile HOME. Il funzionamento di questo comando può essere alterato dal contenuto della variabile CDPATH che può contenere una serie di percorsi di ricerca per la directory su cui ci si vuole spostare. Di norma, questa variabile è opportunamente vuota, in modo da fare semplicemente riferimento alla directory corrente.

command

command [-pVv] <comando> [<argomento>... ]

Esegue un comando con gli eventuali argomenti. In questo caso, per comando si intende un comando interno oppure un programma. Sono escluse le funzioni.

Opzioni

-p

La ricerca del programma avviene all'interno di una serie di percorsi di ricerca predefiniti e non quindi in base al contenuto di PATH.

-v

Emette il nome del programma, così come è stato fornito.

-V

Emette il nome del programma, così come è stato fornito, oltre ad altre informazioni.

continue

continue [n]

Riprende, a partire dalla successiva iterazione, un ciclo for, while o until. Se viene specificato il valore numerico n, il salto riguarda n livelli. Il valore n deve essere maggiore o uguale ad 1. Se n è maggiore dei cicli annidati in funzione, si fa riferimento al ciclo più esterno. Il valore restituito è zero, a meno che non ci sia alcun ciclo da riprendere.

declare

declare [<opzioni>] [<nome>[=<valore>]]

Permette di dichiarare delle variabili ed eventualmente anche di attribuirgli loro dei valori. Se non vengono forniti nomi di variabili da creare, vengono visualizzati quelli esistenti con i loro valori.

Opzioni

-a

Indica che si tratta di un array.

-f

Utilizza solo nomi di funzione.

-r

Fa in modo che le variabili indicate siano disponibili solo in lettura, e cioè che sia impedita la ulteriore assegnazione di valori.

-x

Fa in modo che le variabili indicate siano rese disponibili anche ai programmi eseguiti a partire dalla attuale sessione di funzionamento della shell. Si dice che le variabili vengono esportate.

-i

La variabile viene trattata come un intero e di conseguenza, prima di assegnarle un valore viene eseguita una valutazione di tipo aritmetico.

Utilizzando il segno + al posto del trattino che contrassegna le opzioni, si intende la disattivazione dell'opzione stessa.

Il valore restituito è zero, a meno che non siano stati commessi degli errori.

dirs

dirs [-l] [+/-n]

Visualizza l'elenco delle directory memorizzate nello stack apposito. Per salvare una directory nello stack si utilizza il comando pushd, mentre per tornare alla directory precedentemente salvata si utilizza il comando popd.

Opzioni

+n

Mostra solo l'n-esimo elemento dello stack a partire dall'alto. L'ultimo elemento inserito si raggiunge con +0.

-n

Mostra solo l'n-esimo elemento dello stack a partire dal basso. Il primo elemento inserito si raggiunge con -.

-l

Mostra un elenco lungo senza abbreviare i percorsi con il simbolo ~.

Restituisce zero a meno che non siano stati commessi degli errori.

echo

echo [-neE] [<argomento>... ]

Emette gli argomenti separati da uno spazio. Restituisce sempre il valore zero.

Opzioni

-n

Sopprime il carattere di newline (<LF>) finale, in modo che il testo emesso successivamente prosegua di seguito.

-e

Abilita l'interpretazione delle sequenze di escape descritte più avanti.

-E

Disabilita l'interpretazione delle sequenze di escape anche dove questo potrebbe costituire la modalità predefinita.

Sequenze di escape

echo riconosce alcune sequenze di escape che possono essere utili per formattare il testo da visualizzare.

\a   avvisatore acustico;

\b   backspace;

\c   eliminazione dei caratteri newline (<LF>) anteriori;

\f   form feed o <FF>;

\n   newline o <LF>;

\r   carriage return o <CR>;

\t   tabulazione (orizzontale) o <Tab>;

\v   tabulazione verticale;

\\   barra inclinata rovescia;

\ooo   il carattere il cui codice ottale corrisponde al numero indicato da ooo.

enable

enable [-n] [-all] [<nome>... ]

Abilita o disabilita i comandi interni. Ciò permette l'esecuzione di un programma con lo stesso nome di un comando interno, senza dover indicare il percorso completo di questo programma.

Opzioni

-n

Disabilita i nomi indicati. Se non viene usata questa opzione si intende che i nomi indicati vengono abilitati. Se non viene indicato alcun nome di comando, con questa opzione si ottiene l'elenco di tutti i comandi interni disabilitati, senza questa opzione si ottiene l'elenco dei comandi interni abilitati.

-a | -all

Se questa opzione viene usata da sola, si ottiene l'elenco di tutti i comandi interni con l'indicazione di quelli disabilitati.

Restituisce il valore zero a meno che non sia stato fornito un nome di comando interno inesistente.

eval

eval [<argomento>... ]

Esegue gli argomenti come parte di un unico comando. Restituisce il valore restituito dal comando rappresentato dagli argomenti. Se non vengono indicati argomenti, o se questi sono vuoti, restituisce vero.

exec

exec [[-] <comando> [<argomenti>]]

Se viene specificato un comando (un programma), questo viene eseguito rimpiazzando la shell, in modo da non generare un nuovo processo. Se sono stati indicati degli argomenti, questi vengono passati regolarmente al comando. Se prima del comando si inserisce un trattino (-), l'argomento zero passato al comando conterrà un trattino. Se il comando non può essere eseguito per qualsiasi motivo e ci si trova all'interno di una shell non interattiva, questo termina l'esecuzione restituendo una segnalazione di errore.

<!>   Il fatto di rimpiazzare la shell implica che al termine dell'esecuzione del programma, non ci sarà più la shell. Se si trattava di una finestra di terminale, questa potrebbe semplicemente chiudersi, oppure, se si trattava di una shell di login potrebbe essere richiesto il login.

exit

exit [n]

Termina l'esecuzione della shell restituendo il valore n. Se viene omessa l'indicazione esplicita del valore da restituire, viene utilizzato quello dell'ultimo comando eseguito.

export

export [-nf] [<nome>[=<parola>]... ]

export -p

Le variabili elencate (o le funzioni) vengono segnate per l'esportazione, nel senso che vengono trasferite all'ambiente dei programmi eseguiti successivamente all'interno della shell stessa.

Opzioni

-f

I nomi si riferiscono a funzioni.

-p

Vengono elencati i nomi esportati (variabili e funzioni). È il comportamento predefinito quando non sono stati indicati dei nomi.

-n

Elimina la proprietà di esportazione agli elementi elencati.

Restituisce zero a meno che non siano stati commessi degli errori.

fc

fc [-e <editor>] [-nlr] [<primo>] [<ultimo>]

fc -s [<pattern>=<replace>] [<comando>]

Si tratta di un modo per recuperare una serie di comandi dallo storico per modificarli (correggerli) ed eseguirli nuovamente.

fg

fg [<job>]

Pone il job indicato in foreground, ovvero in primo piano. Se non viene specificato il job, si intende quello attuale, ovvero, l'ultimo a essere stato messo in background.

Il controllo sui job è descritto nella sezione `Controllo dei job'.

getopts

getopts <stringa-di-opzioni> <nome-di-variabile> [<argomenti>]

Viene usato dagli script di shell per analizzare i parametri posizionali. La stringa di opzioni contiene le lettere delle opzioni che devono essere riconosciute. Se una lettera è seguita da un :, l'opzione si aspetta di avere un argomento, che dovrà essere separato da essa da spazi bianchi. Ogni volta che viene eseguito, getopts pone la successiva opzione nella variabile di shell indicata, inizializzandola se non esiste, e l'indice del prossimo argomento che deve essere elaborato, nella variabile OPTIND. OPTIND viene inizializzato a 1 ogni volta che la shell o uno script di shell viene chiamato. Quando una opzione richiede un argomento, getopts pone quell'argomento nella variabile OPTARG. La shell non azzera OPTIND automaticamente; questa variabile deve essere azzerata manualmente tra più chiamate a getopts dentro la stessa esecuzione della shell, se deve essere usato un nuovo insieme di parametri.

getopts può informare degli errori in due modi. Se il primo carattere della stringa di opzioni è :, viene usata una informazione di errore silenzioza. Nelle operazioni normali i messaggi diagnostici sono emessi quando sono incontrate opzioni errate o mancano gli argomenti delle opzioni. Se la variabile OPTERR è posta a zero, nessun messaggio di errore sarà mostrato, perfino se il primo carattere della stringa di opzioni non è :.

Se viene incontrata una opzione errata, getopts assegna alla variabile indicata un punto interrogativo (?), la variabile OPTARG viene eliminata e viene emesso un messaggio di errore. Se getopts funziona in modalità silenziosa, il carattere di opzione trovato viene assegnato a OPTARG e non viene emesso alcun avvertimento.

Se un argomento richiesto non viene trovato, e getopts non funziona in modalità silenziosa, viene assegnato un punto interrogativo alla variabile indicata, OPTARG viene eliminata e viene emesso un messaggio di errore. Se getopts funziona in modalità silenzioza, allora un carattere : viene assegnato alla variabile indicata e a OPTARG viene assegnato il carattere di opzione trovato.

Esempi

L'esempio seguente mostra un semplice script in grado di mostrare la scansione delle opzioni per mezzo di getopts. Si possono utilizzate opzioni da -a a -g; le prime tre richiedono un argomento.

#!/bin/bash
while getopts a:b:c:defg OPZIONE
do
    echo "È stata indicata l'opzione \"${OPZIONE}\" con l'argomento ${OPTARG}."
done

Di solito, il comando getopts viene utilizzato all'interno di un ciclo while per analizzare le varie opzioni e procedere con le varie azioni da compiere di conseguenza. Nell'esempio seguente, possono essere utilizzate opzioni da -a a -g; le prime tre richiedono un argomento, e si fa in modo che getopts non emetta segnalazioni di errore (la stringa di opzioni inizia con un simbolo di due punti).

#!/bin/bash
while getopts :a:b:c:defg OPZIONE
do
    case $OPZIONE in
        a) echo "È stata indicata l'opzione \"a\" con l'argomento $OPTARG."     ;;
        b) echo "È stata indicata l'opzione \"b\" con l'argomento $OPTARG."     ;;
        c) echo "È stata indicata l'opzione \"c\" con l'argomento $OPTARG."     ;;
        d) echo "È stata indicata l'opzione \"d\" che non richiede argomento."  ;;
        e) echo "È stata indicata l'opzione \"e\" che non richiede argomento."  ;;
        f) echo "È stata indicata l'opzione \"f\" che non richiede argomento."  ;;
        g) echo "È stata indicata l'opzione \"g\" che non richiede argomento."  ;;
        *) echo "È stata indicata un'opzione illegale."                         ;;
    esac
done

hash

hash [-r] [<comando>... ]

Per ciascun comando indicato, viene determinato e memorizzato il percorso completo.

Opzioni

-r

Fa sì che lo shell perda le locazioni memorizzate.

Se non viene dato alcun argomento, viene emessa l'informazione circa i comandi memorizzati.

Restituisce vero a meno che non si verifichino errori.

help

help [<modello>]

Mostra una guida sui comandi interni. Se viene fornito il modello, si ottiene una guida dettagliata su tutti i comandi che combaciano con il modello stesso, altrimenti viene emessa una lista dei comandi interni.

Il valore restituito è zero a meno che il modello fornito non combaci con alcun comando.

history

history [n]

history -rwan [<file-storico>]

Se non viene indicata alcuna opzione, emette la lista dello storico dei comandi con i numeri di riga. Le righe segnate con un asterisco sono state modificate. Con argomento n, vengono elencate solo le ultime n righe. Se viene fornito un argomento che non sia un'opzione, questo viene usato come nome del file storico, altrimenti viene usato il valore di HISTFILE. Le opzioni, se fornite, hanno i seguenti significati:

Opzioni

-a

Aggiunge le righe di storico nuove, ovvero quelle inserite dall'inizio della sessione corrente di bash, al file storico.

-n

Inserisce le righe dello storico non ancora lette dal file storico, nella lista dello storico corrente. Queste sono le linee aggiunte al file storico dall'inizio della sessione corrente di bash.

-r

Legge il contenuto del file storico e lo usa come storico corrente.

-w

Scrive lo storico corrente sul file storico sovrascrivendo il contenuto del file stesso.

Restituisce il valore zero a meno che siano stati commessi degli errori oppure ci siano stati dei problemi di lettura o scrittura con il file storico.

jobs

jobs [-lnp] [<job>... ]

jobs [-x <comando> [<argomenti>... ]

La prima forma elenca i job attivi.

Opzioni

-l

Elenca i numeri di processo, o PID, in aggiunta alle normali informazioni.

-p

Elenca solo il PID del primo processo del gruppo di quelli appartenenti al job.

-n

Mostra solo i job che hanno cambiato stato dall'ultima notifica.

Se viene indicato esplicitamente un job, l'elenco risultante sarà ristretto alle sole informazioni su quel job.

Restituisce zero a meno che sia incontrata una opzione non ammessa o sia stata fornita l'indicazione di un job impossibile.

Il controllo sui job è descritto nella sezione `Controllo dei job'.

kill

kill [-s <segnale> | -s<segnale>] [<pid> | <job>]...

kill [-l [<numero-del-segnale>]

Invia il segnale indicato al processo identificato dal numero del PID o dal job. Il segnale viene definito attraverso un nome, come per esempio SIGKILL o un numero di segnale. Il nome del segnale non è sensibile alla differenza tra maiuscole e minuscole e può essere indicato anche senza il prefisso SIG. Se non viene indicato il tipo di segnale da inviare, si intende SIGTERM. Un argomento -l elenca i nomi dei segnali corrispondenti ai numeri eventualmente indicati.

Restituisce vero se almeno un segnale è stato inviato con successo, o falso se avviene un errore di qualunque tipo.

let

let <argomento> [<argomento>... ]

Permette di eseguire operazioni aritmetiche con l'utilizzo di variabili. Ogni argomento è una espressione aritmetica che deve essere risolta. Se l'ultimo argomento viene risolto generando un risultato pari a zero, let restituisce 1, altrimenti restituisce zero.

Esempi

$ let PIPPO=123+45 [Invio]

Calcola la somma di 123 e 45 e la assegna alla variabile PIPPO.

$ echo $PIPPO [Invio]

168

---------

$ let PIPPO1=123+45 PIPPO2=256+64 [Invio]

Calcola la somma di 123 e 45 assegnandola alla variabile PIPPO1 e la la somma di 256 e 64 assegnandola alla variabile PIPPO2.

$ let PIPPO1=PIPPO1+PIPPO2 [Invio]

Somma il contentuo della PIPPO1 con quello di PIPPO2 ed assegna il risultato alla PIPPO1 stessa.

$ echo $PIPPO1 [Invio]

478

local

local [<variabile-locale>[=<valore>]... ]

Per ogni argomento, crea una variabile locale con il nome indicato e gli assegna il valore che appare dopo il simbolo =. Prima e dopo il simbolo = non si possono lasciare spazi. Quando il comando local viene usato dentro una funzione, fa sì che la variabile abbia una visibilità ristretta a quella funzione e ai suoi discendenti. Se non viene indicato alcun argomento, local emette un elenco di variabili locali nello standard output. è un errore usare local quando non ci si trova all'interno di una funzione. Restituisce zero a meno che local sia usato fuori da una funzione, o siano stati fatti altri errori.

logout

logout

Termina l'esecuzione di una shell di login.

popd

popd [+/-n]

Elimina degli elementi dallo stack delle directory. Se non vengono forniti argomenti, elimina la directory in cima allo stack (l'ultimo a essere stato inserito), ed esegue un cd verso quella directory.

Opzioni

+n

Preleva solo l'n-esimo elemento dello stack a partire dall'alto. L'ultimo elemento inserito si raggiunge con +0.

-n

Preleva solo l'n-esimo elemento dello stack a partire dal basso. Il primo elemento inserito si raggiunge con -0.

Se il comando popd viene eseguito con successo, viene anche effettuato un dirs, e il valore restituito è zero. popd restituisce falso se viene commesso un errore di qualunque tipo.

pushd

pushd [<directory>] | pushd [+/-n]

Aggiunge una directory in cima allo stack delle directory, oppure sposta gli elementi e alla fine esegue un cd verso quella directory che si trova in cima. Senza argomenti, scambia le due directory in cima e restituisce zero, a meno che lo stack sia vuoto.

Opzioni

+n

Ruota lo stack in modo che l'n-esima directory a partire dall'altro (cioè a partire dall'ultima) vada in cima.

-n

Ruota lo stack in modo che l'n-esima directory a partire dal basso (cioè a partire dalla prima) vada in cima.

<directory>

L'indicazione esplicita di una directory, aggiunge questa directory in cima allo stack rendendola anche la nuova directory corrente.

Se il comando ha successo, viene anche effettuato un dirs. Se viene usata la prima forma, pushd restituisce zero a meno che il cd fallisca. Con la seconda forma, pushd restituisce zero a meno che non sia specificato un elemento non esistente nello stack, o il cambiamento di directory fallisca.

pwd

pwd

Emette il percorso assoluto della directory corrente. Se è stato usato il comando interno set -P, i percorsi che utilizzano link simbolici vengono tradotti in percorsi reali. Restituisce zero a meno che non si verifichi un errore un errore mentre si legge il percorso della directory corrente.

read

read [-a <array>] [-p <prompt>] [-r] [<variabile>... ]

Viene letta una riga dallo standard input, e la prima parola di questa riga viene assegnata alla prima variabile indicata come argomento, la seconda parola alla seconda variabile, e così via. All'ultima variabile indicata nella riga di comando viene assegnato la parte restante della riga dello standard input che non è stata diversamente distribuita. Per determinare la separazione in parole della riga dello standard input si utilizzano i caratteri contenuti nella variabile IFS. Se non vengono fornite variabili a cui assegnare questi dati, la riga letta viene assegnata alla variabile REPLY.

Restituisce zero, a meno che non sia incontrata la fine del file prima di poter leggere la riga dello standard input.

Opzioni

-r

Utilizzando questa opzione, la barra inclinata rovescia (\) seguita dal carattere newline (<LF>), cosa che di solito viene interpretata come simbolo di continuazione, non viene ignorata, e il simbolo \ viene inteso come parte della riga.

-a <array>

Se viene fornita questa opzione, assieme al nome di una variabile array, si ottiene l'assegnazione sequenziale delle parole all'interno degli elementi di questo array (partendo dalla posizione 0).

-p <prompt>

Permette di definire un prompt. Questo viene visualizzato solo se l'input proviene da un terminale.

readonly

readonly [<variabile>... ]

readonly [-f <funzione>... ]

readonly -p

Le variabili o le funzioni indicate vengono marcate per la sola lettura e i valori di queste non possono essere cambiati dalle assegnazioni successive. Se non viene fornito alcun argomento, e se viene indicata l'opzione -p, viene emessa una lista di tutti i nomi a sola lettura. Un argomento -- disabilita il controllo delle opzioni per il resto degli argomenti. Restituisce zero a meno che non siano commessi degli errori.

return

return [n]

Termina l'esecuzione di una funzione restituendo il valore n. Se viene omessa l'indicazione di questo valore, la funzione che termina restituisce il valore restituito dall'ultimo comando eseguito al suo interno. Se il comando return viene utilizzato al di fuori di una funzione, ma sempre all'interno di uno script, termina l'esecuzione dello script stesso. In particolare, se questo script era stato eseguito attraverso il comando ., ovvero source, viene restituito un valore secondo le stesse regole della conclusione di una funzione, se invece questo script era stato eseguito in maniera diversa, il valore restituito è sempre falso.

set

set [<flag>] [<argomento>... ]

Questo comando viene usato per modificare una serie molto lunga di modalità di funzionamento. Segue l'elenco dei flag.

Opzioni

-a

Le variabili, che vengono modificate o create, vengono marcate automaticamente per l'esportazione verso ambiente per i comandi avviati attraverso la shell.

-b

Fa in modo che lo stato di un job in background terminato, venga riportato immediatamente. Altrimenti, questa informazione viene emessa subito prima del successivo prompt primario.

-e

Termina immediatamente se un comando qualunque conclude la sua esecuzione restituendo uno stato diverso da zero. La shell non esce se il comando che fallisce è parte di un ciclo until o while, di una istruzione if, di una lista &&: o ||, o se il valore restituito dal comando è stato invertito per mezzo di !.

-f

Disabilita l'espansione di percorso (globbing).

-h

Localizza e memorizza la posizione dei programmi alla prima occasione in cui questi vengono eseguiti, in modo da rendere più rapido un eventuale nuovo avvio successivo.

-k

Tutti gli argomenti in forma di istruzione di assegnazione sono collocati nell'ambiente per il comando, non soltanto quelli che precedono il nome del comando stesso.

-m

Il controllo dei job è attivato. Questo flag è attivo in modo predefinito per le shell interattive.

-n

Legge i comandi, ma non li esegue. Ciò può essere usato per controllare gli errori di sintassi di uno script di shell. Questo valore viene ignorato dalle shell interattive.

-o <nome-di-opzione>

Permette di indicare una serie di opzioni in modo verbale (espressivo). Queste opzioni vengono descritte nella sezione seguente.

Se non viene fornito alcun nome di opzione, vengono emessi i valori delle opzioni correnti.

-p

Attiva la modalità di funzionamento privilegiato. In questa modalità, il file indicato all'interno della variabile BASH_ENV non viene elaborato e le funzioni di shell non vengono ereditate dall'ambiente. Questa modalità è abilitata automaticamente all'avvio se lo UID e il GID efficace non è uguale all'UID e GID reale. Disattivare questa modalità fa sì che lo UID e GID efficaci diventino uguali a quelli reali.

-t

Termina l'esecuzione dopo aver letto ed eseguito un comando.

-u

Fa in modo che venga considerato un errore l'utilizzo di variabili non impostate (predisposte) quando si effettua l'espansione di una variabile (o di un parametro). In tal caso, quindi, la shell emette un messaggio di errore e, se il funzionamento non è interattivo, termina restituendo un valore diverso da zero.

-v

Emette le righe inserite nella shell appena queste vengono lette.

-x

Nel momento in cui si eseguono dei comandi, viene emesso il comando stesso attraverso lo standard output preceduto da quanto contenuto nella variabile PS4.

-B

Viene attivata l'espansione delle parentesi graffe (predefinito).

-C

Disabilita la sovrascrittura dei file preesistenti a seguito di una ridirezione dell'output attraverso l'uso degli operatori >, >& e <>. Questa impostazione può essere scavalcata (in modo da riscrivere i file) utilizzando l'operatore di ridirezione >| al posto di > ( `Ridirezione').

<!>   In generale sarebbe meglio evitare di intervenire in questo modo, dal momento che ciò non è conforme allo standard di utilizzo normale.

-H

Abilita la sostituzione dallo storico utilizzando lo stile !. Questo flag è attivo in modo predefinito quando la shell è interattiva.

-P

Se attivato, non segue i link simbolici quando esegue i comandi che, come cd, cambiano la directory corrente. Vengono usaste invece le directory reali. L'azione di seguire i link simbolici non è così ovvia come sembra.

Esempi

Se /usr/sys è un link simbolico a /usr/local/sys/, valgono le operazioni seguenti.

$ cd /usr/sys [Invio]

$ echo $PWD [Invio]

/usr/sys

$ cd .. [Invio]

$ echo $PWD [Invio]

/usr

Se invece è stato attivato set -P, la stessa cosa funziona nel modo seguente.

$ cd /usr/sys [Invio]

$ echo $PWD [Invio]

/usr/sys

$ cd .. [Invio]

$ echo $PWD [Invio]

/usr/local

--

Se nessun argomento segue questo flag, allora i parametri posizionali non sono impostati. Altrimenti, i parametri posizionali sono posti al valore degli argomenti, persino se alcuni di loro iniziano con un trattino.

-

Segnala la fine delle opzioni, e fa sì che tutti i rimanenti argomenti siano assegnati ai parametri posizionali. Le opzioni -x e -v sono disattivate. Se non vi è alcun argomento, i parametri posizionali rimangono inalterati.

I flag sono disattivati in modo predefinito, salvo se specificato diversamente. Usando il segno + piuttosto di - fa in modo di disattivare (off) questi flag. I flag possono anche essere specificati come opzioni in una chiamata della shell. L'insieme corrente di flag può essere trovato nel parametro $-. Dopo le opzioni, gli argomenti rimanenti sono trattati come valori per i parametri posizionali e sono assegnati in ordine a $1, $2, ... Se non viene fornita alcuna opzione o argomento, sono emesse tutte le variabili di shell. Restituisce vero a meno che non sia incontrata una opzione errata.

Opzioni del flag -o

Il flag -o permette di definire le opzioni elencate di seguito.

allexport

Lo stesso del flag -a.

braceexpand

La shell effettua l'espansione delle parentesi graffe. Si tratta della modalità predefinita.

emacs

Usa l'editing della riga di comando in stile Emacs. Si tratta della modalità predefinita quando la shell è interattiva, a meno che non sia stata avviata con l'opzione -nolineediting.

errexit

Lo stesso di -e.

histexpand

Lo stesso di -H.

ignoreeof

L'effetto è lo stesso di quello ottenibile eseguendo IGNOREEOF=10.

interactive-comments

Permette di ignorare i commenti (# e il resto della riga) anche durante l'esecuzione di una shell interattiva

monitor

Lo stesso di -m.

noclobber

Lo stesso di -C.

noexec

Lo stesso di -n.

noglob

Lo stesso di -f.

nohash

Lo stesso di -d.

notify

Lo stesso di -b.

nounset

Lo stesso di -u.

physical

Lo stesso di -P.

posix

Cambia il comportamento di bash dove le operazioni predefinite differiscono dallo standard POSIX 1003.2 per farlo combaciare con lo standard.

privileged

Lo stesso di -p.

verbose

Lo stesso di -v.

vi

Usa un editing della riga di comando in stile vi.

xtrace

Lo stesso di -x.

shift

shift [n]

I parametri posizionali da n+1 in avanti sono spostati a partire da $1 in poi. Se n è 0, nessun parametro viene cambiato. Se n non è indicato, il suo valore predefinito è 1. Il valore di n deve essere un numero non negativo minore o uguale a $#. Se n è più grande di $#, i parametri posizionali non vengono modificati.

Restituisce un valore maggiore di zero se n è più grande di $# o minore di 0; altrimenti restituisce zero.

shopt

shopt [<opzioni>] [<opzione-di-shell>... ]

Questo comando permette di cambiare alcune opzioni di shell, attivandole o disattivandole. shopt si affianca al comando set, e permette anche di intervenire sulle ``opzioni'' gestite da quest'ultimo.

Opzioni

-s

Attiva le opzioni di shell elencate.

-u

Disattiva le opzioni di shell elencate.

-o [<opzione-set>... ]

Permette di intervenire sulle opzioni gestite dal comando set.

---------

Se si utilizza l'opzione -s o -u senza l'indicazione di nomi di opzioni di shell, vengono elencati rispettivamente quelle attive e quelle disattivate.

L'elenco di queste opzioni di shell non viene riportato. Vedere bash(1).

suspend

suspend [-f]

Sospende l'esecuzione della shell fino a che non riceve un segnale SIGCONT. L'opzione -f permette di sospenderne l'esecuzione anche se si tratta di una shell di login;.

Restituisce zero a meno non si verifichi un errore.

test

test <espressione-condizionale>

[ <espressione-condizionale> ]

Risolve (valuta) l'espressione indicata (la seconda forma utilizza semplicemente un'espressione racchiusa tra parentesi quadre). Il valore restituito può essere vero (corrispondente a zero) o falso (corrispondente a 1) ed è pari al risultato della valutazione dell'espressione. Le espressioni possono essere unarie o binarie. Le espressioni unarie sono usate spesso per esaminare lo stato di un file. Vi sono operatori su stringa e anche operatori di comparazione numerica. Ogni operatore e operando deve essere un argomento separato. Se i file vengono espressi nella forma /dev/fd/n, allora si fa riferimento al descrittore di file n.

test sul tipo di file

-e file

vero se il file esiste ed è di qualunque tipo.

-b file

vero se il file esiste ed è un dispositivo a blocchi.

-c file

vero se il file esiste ed è un dispositivo a caratteri.

-d file

vero se il file esiste ed è una directory.

-f file

vero se il file esiste ed è un file normale.

-L file

vero se il file esiste ed è un link simbolico.

-p file

vero se il file esiste ed è una pipe con nome.

-S file

vero se il file esiste ed è un socket.

-t [<file-descriptor>]

vero se il descrittore di file indicato è aperto su un terminale. Se non viene indicato l'argomento, si intende 1 che corrisponde allo standard output.

Test sui permessi di accesso

-g file

vero se il file esiste ed è impostato il suo bit SGID.

-u file

vero se il file esiste ed è impostato il suo bit SUID.

-k file

vero se il file ha il suo bit sticky impostato.

-r file

vero se il file esiste ed è leggibile.

-w file

vero se il file esiste ed è scrivibile.

-x file

vero se il file esiste ed è eseguibile.

-O file

vero se il file esiste e appartiene all'UID efficace dell'utente attuale.

-G file

vero se il file esiste e appartiene al GID efficace dell'utente attuale

Test sulle caratteristiche dei file

-s file

vero se il file esiste e ha una dimensione maggiore di zero.

<file1> -nt <file2>

vero se <file1> è più recente (in base alla data di modifica) di <file2>.

<file1> -ot <file2>

vero se <file1> è più vecchio (in base alla data di modifica) di <file2>.

<file1> -et <file2>

vero se i due file sono sullo stesso dispositivo e hanno lo stesso numero di inode. Ciò accade quando si creano degli hard link.

Test su stringhe

-z <stringa>

vero se la lunghezza della stringa è zero.

-n <stringa>

vero se la lunghezza della stringa è diversa da zero.

<stringa1> == <stringa2>

vero se le stringhe sono uguali.

<stringa1> != <stringa2>

vero se le stringhe sono diverse.

<stringa1> < <stringa2>

vero se <stringa1> precede <stringa2> in un ipotetico ordinamento.

<stringa1> > <stringa2>

vero se <stringa2> precede <stringa1> in un ipotetico ordinamento.

Test di confronto numerico

<argomento1> <operando> <argomento2>

Il risultato dipende dall'operando utilizzato.

Operandi

-eq   uguale a;

-ne   diverso da;

-lt   minore di;

-le   minore o uguale a;

-gt   maggiore di;

-ge   maggiore o uguale a.

Gli argomenti da confrontare possono essere interi positivi, interi negativi, o l'espressione speciale -l <stringa> che calcola la lunghezza della stringa stessa.

Operatori booleani

! <espressione>

vero se il risultato dell'espressione è falso.

<espressione1> -a <espressione2>

vero se entrambe le espressioni danno un risultato vero.

<espressione1> -o <espressione2>

vero se almeno una delle due espressioni da un risultato vero.

times

times

Emette i tempi di utilizzo accumulati.

trap

trap [-l] [<argomento>] [<segnale>]

Il comando espresso nell'argomento dovrà essere letto ed eseguito quando la shell riceverà il/i segnale/i indicati. Se non viene fornito l'argomento, o viene fornito - al suo posto, tutti i segnali specificati sono riportati al loro valore originale (i valori che avevano al momento dell'ingresso nella shell). Se l'argomento fornito corrisponde a una stringa nulla, questo segnale viene ignorato dalla shell e dai comandi che questo avvia. Il segnale indicato deve essere uno di quelli definiti in signal.h, o un numero di segnale. Se il segnale è EXIT, pari a zero, il comando contenuto nell'argomento viene eseguito all'uscita della shell.

Se viene utilizzato senza argomenti, trap emette la lista di comandi associati con ciascun numero di segnale. L'opzione -l fa sì che la shell emetta una lista di nomi di segnali e i loro numeri corrispondenti. I segnali ignorati al momento dell'ingresso della shell non possono essere intercettati o inizializzati. I segnali intercettati sono riportati al loro valore originale in un processo discendente quando questo viene creato.

Il valore restituito è vero a meno che non siano riscontrati errori.

type

type [-all] [-type | -path] <nome> [<nome>... ]

Determina le caratteristiche di uno o più comandi indicati come argomento.

Opzioni

<nessuna opzione>

Se viene usato senza opzioni, indica come verrebbe interpretato ciascun nome indicato negli argomenti, se usato come comando.

-type | -t

Viene emessa la definizione del tipo di nome indicato tra gli argomenti. Può trattarsi di:

Se il nome non viene trovato, allora non viene emesso nulla e viene restituito il valore falso.

-path | -p

Viene emesso o il nome del file che verrebbe eseguito se il nome indicato negli argomenti fosse utilizzato come un nome di comando, o nulla se non esiste un tale file. Se un comando si trova nella tabella hash, viene emesso il valore lì contenuto e non necessariamente il file che appare per primo nell'elenco dei percorsi di ricerca della variabile PATH.

-all | -a

Emette tutti i ritrovamenti di elementi con i nomi indicati. Inclusi alias e funzioni, se, e solo se non viene usato anche il flag -path. La tavola hash dei comandi non viene consultata quando si usa -all.

Restituisce vero se uno qualsiasi degli argomenti viene trovato, falso se non ne viene trovato alcuno.

ulimit

ulimit [<opzioni>] [<limite>]

Fornisce il controllo sulle risorse disponibili per la shell e per i processi avviati da questa, sui sistemi che permettono un tale controllo. Il valore del limite può essere un numero nell'unità specificata per la risorsa, o il valore unlimited.

Se il limite viene omesso, viene emesso il valore corrente del limite soft o hard (a seconda delle opzioni) della risorsa,. Quando viene specificata più di una risorsa, il nome del limite e l'unità vengono emessi prima del valore.

Opzioni

-H

Viene impostato il limite hard per la data risorsa. Un limite hard non può essere aumentato una volta che è stato impostato. Se non viene specificata questa opzione, si intende l'opzione -S in modo predefinito.

-S

Viene impostato il limite soft per la data risorsa. Un limite soft può essere aumentato fino al valore del limite hard. Se non viene specificata questa opzione, e nemmeno -H, questa è l'opzione predefinita.

-a

Sono riportati tutti i limiti correnti.

-c

La grandezza massima dei file core creati.

-d

La grandezza massima del segmento dati di un processo.

-f

La grandezza massima dei file creati dalla shell.

-m

La grandezza massima della memoria occupata.

-s

La grandezza massima dello stack.

-t

Il massimo quantitativo di tempo di CPU in secondi.

-p

La grandezza della pipe in blocchi da 512 byte (questo non può essere cambiato).

-n

Il numero massimo di descrittori di file aperti (la maggior parte dei sistemi non permette che questo valore sia impostato, ma solo mostrato).

-u

Il numero massimo di processi disponibili per un singolo utente.

-v

Il massimo ammontare di memoria virtuale disponibile per la shell.

Se il limite viene espresso, questo diventa il nuovo valore per la risorsa specificata. Se non viene espressa alcuna opzione, si assume -f. I valori sono in multipli di 1024 byte, tranne che per -t che è in secondi, -p che è in unità di blocchi da 512 byte, e -n e -u, che sono numeri senza unità.

Il valore restituito è zero a meno che non siano commessi errori.

umask

umask [-S] [<modalità>]

La maschera di creazione dei file dell'utente viene modificata in modo da farla coincidere con la modalità indicata. Se la modalità inizia con una cifra numerica, questo valore viene interpretato come un numero ottale; altrimenti viene interpretato in modo simbolico, così come avviene con chmod. Se la modalità viene omessa, oppure se è stata fornita l'opzione -S, viene emesso il valore corrente della maschera. L'opzione -S fa sì che la maschera venga emessa in formato simbolico; l'uscita predefinita è un numero ottale.

Restituisce zero a meno che non vengano riscontrati errori.

unalias

unalias [-a] [<nome-di-alias>... ]

Rimuove l'alias indicato dalla lista degli alias definiti. Se viene fornita l'opzione -a, sono rimosse tutte le definizioni di alias.

Restituisce vero a meno che non vengano riscontrati errori.

unset

unset [-fv] [<nome-di-variabile-o-di-funzione>... ]

Vengono rimosse le variabili indicate. Se viene utilizzata l'opzione -f, si fa riferimento a funzioni.

<!>   Le variabili PATH, IFS, PPID, PS1, PS2, UID, e EUID non possono essere rimosse.

<!>   Se una qualsiasi fra RANDOM, SECONDS, LINENO, o HISTCMD viene rimossa, perde la sua speciale proprietà, persino se essa viene successivamente ripristinata.

Restituisce vero a meno che non vengano riscontrati errori.

wait

wait [n]

Attende la conclusione del processo specificato e restituisce il suo stato di uscita. Il numero n può essere un PID o un job; se viene indicato un job, si attende la conclusione di tutti i processi nella pipeline di quel job. Se n non viene indicato, si aspetta la conclusione di tutti i processi discendenti correntemente attivi, e il valore restituito è zero. Se n specifica un processo o un job non esistente, viene restituito 127. Altrimenti, il valore restituito è lo stesso dell'ultimo processo o job per cui si era in attesa.

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice