bash - GNU Bourne-Again SHell
bash [opzioni] [stringa_di_comando | file]
Bash is Copyright (C) 1989-2022 by the Free Software Foundation,
Inc.
Bash è un interprete di linguaggio di comandi
sh-compatibile che esegue i comandi letti dallo standard input o da
un file. Bash inoltre incorpora utili caratteristiche delle shell
Korn e C (ksh e csh).
Bash è progettata per essere un'implementazione
conforme alla parte Shell and Utilities della IEEE POSIX specification (IEEE
Standard 1003.1). Bash può essere configurata per essere
conforme allo standard POSIX in modo predefinito.
Tutte le opzioni monocarattere della shell documentate nella
descrizione del comando incorporato set, compreso -o, possono
essere usate come opzioni quando la shell è invocata. In aggiunta,
quando è invocata, bash interpreta le seguenti opzioni:
- -c
- Se è presente l'opzione -c, i comandi sono letti dal primo
argomento non di opzione stringa_di_comando. Se vi sono argomenti
dopo la stringa_di_comando, essi sono assegnati ai parametri
posizionali, partendo da $0, e i rimanenti argomenti vengono
assegnati ai parametri posizionali. L'assegnamento a $0 imposta il
nome della shell, che è usato nei messaggi di avvertimento e di
errore.
- -i
- Se è presente l'opzione -i, la shell è
interattiva.
- -l
- fa sì che bash funzioni come se fosse stata invocata come
una shell di login (si veda INVOCAZIONE più
avanti).
- -r
- Se l'opzione -r è presente, la shell diventa
ristretta (si veda SHELL RISTRETTA più
avanti).
- -s
- Se è presente l'opzione -s, o se non rimane alcun argomento
dopo che sono state esaminate le opzioni, i comandi sono letti dallo
standard input. Quest'opzione permette di impostare i parametri
posizionali quando si invoca una shell interattiva o si legge l'input
tramite una pipe.
- -v
- Stampa le righe in input alla shell appena sono lette.
- -x
- Stampa comandi e loro argomenti così come vengono eseguiti.
- -D
- Una lista di tutte le stringhe fra virgolette doppie preceduta da $
è stampata sullo standard output. Queste sono le stringhe che sono
soggette a traduzione di lingua quando la localizzazione corrente non
è C o POSIX. Questo implica l'opzione -n;
nessun comando verrà eseguito.
- [-+]O [opzione_shopt]
- opzione_shopt è una delle opzioni di shell accettate dal
comando incorporato shopt (si veda COMANDI INCORPORATI
DELLA SHELL più avanti). Se opzione_shopt
è presente, -O imposta il valore di quella opzione;
+O lo rimuove. Se opzione_shopt non è fornita, i nomi
e i valori delle opzioni della shell accettati da shopt sono
stampati sullo standard output. Se l'opzione di invocazione è
+O, l'output è mostrato in un formato riutilizzabile come
input.
- --
- Un -- segna la fine delle opzioni e disabilita l'ulteriore
elaborazione di opzioni. Gli argomenti dopo il -- sono trattati
come nomi-file e argomenti. Un argomento - è equivalente a
--.
Bash interpreta anche un certo numero di opzioni
multicarattere. Queste opzioni devono apparire nella riga di comando prima
delle opzioni a carattere singolo.
- --debugger
- Dispone l'esecuzione del debugger profile prima dell'avvio della shell.
Attiva la modalità estesa di debug (si veda la descrizione
dell'opzione extdebug al comando incorporato shopt
più avanti).
- --dump-po-strings
- Equivalente a -D, ma l'output è nel formato file GNU
gettext po (portable object).
- --dump-strings
- Equivalente a -D.
- --help
- Mostra sullo standard output un messaggio sull'uso ed esce con stato di
uscita 0.
- --init-file
file
- --rcfile
file
- Esegue comandi letti da file invece che dal file d'inizializzazione
generale di sistema /etc/bash.bashrc e dal file personale di
inizializzazione standard ~/.bashrc se la shell è
interattiva (si veda INVOCAZIONE più
avanti).
- --login
- Equivalente a -l.
- --noediting
- Non usa la libreria GNU readline per leggere righe di comando
quando la shell è interattiva.
- --noprofile
- Non legge né il file di inizializzazione generico di sistema
/etc/profile né alcuno dei file personali di
inizializzazione ~/.bash_profile, ~/.bash_login o
~/.profile. Per impostazione predefinita bash legge questi
file quando è invocata come shell di login (si veda
INVOCAZIONE più avanti).
- --norc
- Non legge né esegue il file d'inizializzazione generale di sistema
/etc/bash.bashrc e il file personale di inizializzazione
~/.bashrc se la shell è interattiva. Quest'opzione è
attiva per impostazione predefinita se la shell è invocata come
sh.
- --posix
- Cambia il comportamento di bash dove le operazioni predefinite
differiscono dallo standard POSIX, in modo da corrispondere allo standard
(modalità posix). Si veda più avanti VEDERE
ANCHE dove viene citato un documento che spiega nel dettaglio
come la modalità posix influenza il comportamento di bash.
- --restricted
- La shell diventa ristretta (si veda SHELL RISTRETTA
più avanti).
- --verbose
- Equivalente a -v.
- --version
- Mostra informazioni sulla versione di questa istanza di bash sullo
standard output ed esce con stato d'uscita 0.
Se rimangono argomenti dopo che sono state elaborate le opzioni, e
né l'opzione -c né l'opzione -s sono state
specificate, il primo argomento si assume sia il nome di un file che
contiene dei comandi di shell. Se bash è invocata in questo
modo, $0 è impostato al nome del file, e i parametri
posizionali sono impostati agli argomenti che lo seguono. Bash legge
ed esegue comandi da questo file, poi esce. Lo stato d'uscita di Bash
è lo stato d'uscita dell'ultimo comando eseguito nello script. Se non
è eseguito alcun comando lo stato d'uscita è 0. Viene fatto un
primo tentativo per aprire il file nella directory corrente, e se non viene
trovato il file la shell lo cerca nelle directory in
PATH.
Una shell di login è quella in cui il primo
carattere dell'argomento numero zero è un -, o una che venga
avviata con l'opzione --login.
Una shell è detta interattiva se è stata
avviata senza argomenti diversi dalle opzioni (a meno che non venga
specificato -s) e senza l'opzione -c, i cui standard input e
standard error sono entrambi inviati a terminali (come determinato da
isatty(3)), o se viene avviata con l'opzione -i.
PS1 è impostato e $- include i se
bash è interattiva, permettendo a uno script di shell
o a un file di inizializzazione di verificare questo stato.
I seguenti paragrafi descrivono come bash esegue i suoi
file di inizializzazione. Se qualcuno dei file esiste ma non può
essere letto bash riporta un errore. Le tilde sono espanse nei
nomi-file come descritto più avanti in Espansione della tilde
nella sezione ESPANSIONE.
Quando bash è invocata come una shell di login
interattiva o come una shell non interattiva con l'opzione --login,
prima legge ed esegue comandi dal file /etc/profile, se quel file
esiste. Dopo aver letto quel file, cerca ~/.bash_profile,
~/.bash_login e ~/.profile, in quest'ordine, e legge ed esegue
comandi dal primo file che trova e che è leggibile. L'opzione
--noprofile può essere usata quando si avvia la shell per
inibire questo comportamento.
Quando una shell di login interattiva esce, o una shell di login
non interattiva esegue il comando incorporato exit, bash legge
ed esegue comandi dal file ~/.bash_logout, se esiste.
Quando una shell interattiva che non è una shell di login
è avviata, bash legge ed esegue comandi da
/etc/bash.bashrc e ~/.bashrc, se quei file esistono.
Ciò può essere inibito utilizzando l'opzione --norc.
Con l'opzione --rcfile file bash legge ed esegue
comandi da file invece che da /etc/bash.bashrc e
~/.bashrc.
Quando bash è avviata in modo non interattivo, per
eseguire uno script di shell, per esempio, cerca la variabile di ambiente
BASH_ENV, espande il suo valore se questo esiste, e
utilizza il valore espanso come il nome di un file da leggere ed eseguire.
Bash si comporta come se fossero stati eseguiti i seguenti
comandi:
if [ -n "$BASH_ENV" ]; then .
"$BASH_ENV"; fi
ma il valore della variabile PATH non è usato
per cercare il nome-file.
Se bash è invocata col nome sh, tenta di
imitare il comportamento di inizializzazione delle vecchie versioni di
sh il più fedelmente possibile, e allo stesso tempo si
conforma allo standard POSIX. Quando invocata come una shell di login
interattiva, o una shell interattiva con l'opzione --login, per prima
cosa tenta di leggere ed eseguire i comandi da /etc/profile e
~/.profile, in quest'ordine. L'opzione --noprofile può
essere usata per inibire questo comportamento. Quando invocata come una
shell interattiva col nome sh, bash cerca la variabile
ENV, espande il suo valore se questo è definito, e
usa il valore espanso come nome di un file da leggere ed eseguire.
Poiché una shell invocata come sh non tenta di leggere ed
eseguire comandi da qualsiasi altro file di inizializzazione, l'opzione
--rcfile non ha alcun effetto. Una shell non interattiva invocata col
nome sh non tenta di leggere nessun altro file di inizializzazione.
Quando invocata come sh, bash lavora in modalità
posix dopo che i file di inizializzazione sono stati letti.
Quando bash è avviata in modalità
posix come con l'opzione --posix della riga di comando, essa
segue lo standard POSIX per i file di inizializzazione. In questa
modalità la shell interattiva espande la variabile ENV
e i comandi sono letti ed eseguiti dal file il cui nome è il
valore espanso. Nessun altro file di inizializzazione viene letto.
Bash cerca di determinare quando la si sta eseguendo col
suo standard input connesso a una connessione di rete, come quando è
eseguita dallo storico demone di shell remota, solitamente rshd, o
dal demone di shell sicura sshd. Se bash stabilisce che
è eseguita in questo modo, legge ed esegue comandi da
/etc/bash.bashrc e ~/.bashrc, se questi file esistono e sono
leggibili. Non fa questo se è invocata come sh. L'opzione
--norc può essere usata per inibire questo comportamento, e
l'opzione --rcfile può essere usata per forzare la lettura di
un altro file, ma né rshd né sshd solitamente
invocano la shell con queste opzioni o permettono che siano specificate.
Se la shell è avviata con l'id effettivo dell'utente
(gruppo) non uguale all'id reale dell'utente (gruppo), e non viene fornita
l'opzione -p, nessun file di inizializzazione viene letto, le
funzioni di shell non vengono ereditate dall'ambiente, le variabili
SHELLOPTS, BASHOPTS,
CDPATH e GLOBIGNORE, se esistono
nell'ambiente, vengono ignorate, e l'id effettivo dell'utente è
impostato all'id reale dell'utente. Se l'opzione -p è fornita
all'invocazione, il comportamento all'avvio è il medesimo, ma l'id
effettivo dell'utente non viene reimpostato.
Le seguenti definizioni sono usate nel resto di questo
documento.
- blank
- Uno spazio o carattere di tabulazione (tab).
- parola
- Una sequenza di caratteri considerata come una singola unità dalla
shell. Nota anche come token.
- nome
- Una parola che consiste solo di caratteri alfanumerici e trattini
di sottolineatura, e comincia con un carattere alfabetico o un trattino di
sottolineatura. Definita anche un identificatore.
- metacarattere
- Un carattere che, quando non quotato, separa le parole. Uno dei seguenti:
| & ; ( ) < > space tab newline
- operatore di
controllo
- Un token che realizza una funzione di controllo. È uno dei
seguenti simboli:
|| & && ; ;; ;& ;;& ( ) | |&
<newline>
Le parole riservate sono parole che hanno un significato
speciale per la shell. Le seguenti parole sono riconosciute come riservate
quando non quotate e sono o la prima parola di un comando (si veda
GRAMMATICA DELLA SHELL più avanti), o la terza parola
di un comando case o select (è valida solo
in), o la terza parola di un comando for (sono valide solo
in e do):
! case coproc do done elif else esac fi for function if in
select then until while { } time [[ ]]
Questa sezione descrive la sintassi delle varie forme dei comandi
shell.
Un comando semplice è una sequenza opzionale di
assegnamenti di variabile seguita da parole, separate da blank, e
ridirezioni, e terminata da un operatore di controllo. La prima
parola specifica il comando che deve essere eseguito, ed è passata
come argomento zero. Le rimanenti parole sono passate come argomenti al
comando invocato.
Il valore di ritorno di un comando semplice è il suo
stato di uscita, o 128+n se il comando è fatto terminare da un
segnale n.
Una pipeline è una sequenza di uno o più
comandi separati da uno degli operatori di controllo | o
|&. Il formato per una pipeline è:
[time [-p]] [ ! ] comando1 [
[|⎪|&] comando2 ... ]
Lo standard output di comando1 è connesso attraverso
una pipe allo standard input di comando2. Questa connessione è
effettuata prima di qualsiasi ridirezione specificata da comando1 (si
veda RIDIREZIONE più avanti). Se viene usato
|&, lo standard error di comando1, in aggiunta al
suo standard output, è connesso allo standard input di
comando2 tramite la pipe; è una notazione breve per
2>&1 |. Questa ridirezione implicita dello standard error allo
standard output è effettuata dopo qualsiasi ridirezione specificata
da comando1.
Lo stato di ritorno di una pipeline è lo stato d'uscita
dell'ultimo comando, a meno che l'opzione pipefail non sia abilitata.
Se pipefail è abilitata, lo stato di ritorno della pipeline
è il valore dell'ultimo comando (il più a destra) che esce con
uno stato diverso da zero o zero se tutti i comandi escono con successo. Se
la parola riservata ! precede una pipeline, lo stato d'uscita di
quella pipeline è la negazione logica dello stato d'uscita come sopra
descritto. La shell aspetta che tutti i comandi nella pipeline terminino
prima di ritornare un valore.
Se la parola riservata time precede una pipeline, quando la
pipeline termina vengono notificati i tempi impiegati dall'utente e dal
sistema per la sua esecuzione. L'opzione -p cambia il formato di
output con quello specificato da POSIX. Quando la shell è in
modalità posix, non riconosce time come una parola
riservata se il token successivo inizia con un `-'. La variabile
TIMEFORMAT può essere impostata a una stringa
di formato che specifica come le informazioni sui tempi dovranno
essere mostrate; si veda la descrizione di TIMEFORMAT sotto
Variabili di shell più avanti.
Quando la shell è in modalità posix,
time può essere seguito da un newline. In questo caso la shell
visualizza il tempo totale dell'utente e del sistema utilizzato dalla shell
e dai suoi figli. Si può usare la variabile TIMEFORMAT
per specificare il formato dell'informazione sul tempo.
Ogni comando in una pipeline, nella quale vengano create pipe,
è eseguito come un processo separato (cioè in una
subshell). Si veda AMBIENTE DI ESECUZIONE DEI COMANDI
per la descrizione di subshell e di un ambiente di subshell. Se
è abilitata l'opzione lastpipe usando il comando incorporato
shopt (si veda più avanti la descrizione di shopt),
l'ultimo elemento di una pipeline può essere eseguito dal processo di
shell quando il controllo dei job non è attivo.
Una lista è una sequenza di una o più
pipeline separate da uno degli operatori ;, &,
&& o ||, e facoltativamente fatta terminare da uno fra
;, & o <newline>.
Di questi operatori di lista, && e || hanno
uguale precedenza, seguiti da ; e &, che hanno uguale
precedenza.
Per delimitare i comandi in una lista si può usare
una sequenza di uno o più newline al posto di un punto e virgola.
Se un comando è terminato dall'operatore di controllo
&, la shell esegue il comando in background in una
subshell. La shell non aspetta che il comando finisca, e lo stato di ritorno
è 0. Questi sono detti comandi asincroni. I comandi separati
da un ; sono eseguiti sequenzialmente; la shell aspetta che ogni
comando, in sequenza, termini. Lo stato di ritorno è lo stato
d'uscita dell'ultimo comando eseguito.
Le liste AND e OR sono sequenze di una o più pipeline
separate, rispettivamente, dagli operatori di controllo && e
||. Le liste AND e OR vengono eseguite con associatività a
sinistra. Una lista AND ha la forma
comando2 è eseguito se, e solo se, comando1
restituisce uno stato d'uscita di zero (successo).
Una lista OR ha la forma
comando2 è eseguito se e solo se comando1
ritorna uno stato d'uscita diverso da zero. Lo stato di ritorno di liste AND
e OR è lo stato d'uscita dell'ultimo comando eseguito nella
lista.
Un comando composto è uno dei seguenti. Nella
maggior parte dei casi una lista in una descrizione di comando
può essere separata dal resto del comando da uno o più
newline, e può essere seguita da un newline al posto di un punto e
virgola.
- (lista)
- lista è eseguita in un ambiente di subshell (si veda
AMBIENTE DI ESECUZIONE DEI COMANDI più avanti).
Assegnamenti di variabili e comandi incorporati che influenzano
l'ambiente della shell non hanno effetto dopo che il comando è
completato. Lo stato di ritorno è lo stato d'uscita di
lista.
- { lista; }
- lista è semplicemente eseguita nell'ambiente di shell
corrente. lista deve essere fatta terminare con un newline o un
punto e virgola. Questo è conosciuto come group command. Lo
stato di ritorno è lo stato d'uscita di lista. Da notare che
diversamente dai metacaratteri ( e ), { e }
sono parole riservate e devono essere usati quando una parola
riservata è ammissibile. Poiché esse non causano una
divisione delle parole, devono essere separate da lista con uno
spazio o un altro metacarattere di shell.
- ((espressione))
- L'espressione è valutata in accordo con le regole descritte
più avanti sotto VALUTAZIONE ARITMETICA. Se il valore
dell'espressione è diverso da zero, lo stato di ritorno
è 0; altrimenti lo stato di ritorno è 1.
L'espressione sottostà alle stesse espansioni come se fosse
tra virgolette doppie, ma i caratteri di virgolette doppie presenti in
espressione non sono trattati in maniera speciale e sono
rimossi.
- [[ espressione ]]
- Ritorna uno stato di 0 o 1 a seconda della valutazione della espressione
condizionale espressione. Le espressioni sono composte dalle
primitive descritte più avanti sotto ESPRESSIONI
CONDIZIONALI. La suddivisione in parole e l'espansione del
nome di percorso non sono effettuate sulle parole fra la [[ e
]]; espansione della tilde, espansione di parametro e di variabile,
espansione aritmetica, sostituzione di comando, sostituzione di processo,
e rimozione degli apici (le espansioni che sarebbero occorse se le parole
fossero state racchiuse tra doppie virgolette) vengono eseguite. Gli
operatori condizionali come -f devono essere senza apici per essere
riconosciuti come primitive.
Quando vengono usati con [[, gli operatori <
e > ordinano lessicograficamente usando la localizzazione
corrente.
Si veda la descrizione del comando incorporato test
(sezione COMANDI INCORPORATI DELLA SHELL più avanti) per la gestione
di parametri (cioè parametri mancanti).
Quando vengono usati gli operatori == e !=, la
stringa alla destra dell'operatore è considerata un modello ed
è confrontata in accordo con le regole descritte più avanti
sotto Modelli di ricerca, come se fosse abilitata l'opzione di shell
extglob. L'operatore = è equivalente a ==. Se
l'opzione di shell nocasematch è abilitata, il confronto
è effettuato senza distinzione fra maiuscole e minuscole nei
caratteri alfabetici. Il valore di ritorno è 0 se la stringa
corrisponde (==) o non corrisponde (!=) al modello, e 1
altrimenti. Ogni parte del modello può essere quotata per forzarla a
essere considerata come una stringa.
Un ulteriore operatore binario, =~, è disponibile
con la stessa precedenza di == e !=. Quando viene usato, la
stringa alla destra dell'operatore è considerata un'espressione
regolare estesa POSIX e confrontata come tale (usando le interfacce POSIX
regcomp e regexec usualmente descritte in regex(3)). Il
valore di ritorno è 0 se la stringa corrisponde al modello, e 1
altrimenti. Se l'espressione regolare è sintatticamente scorretta, il
valore di ritorno dell'espressione condizionale è 2. Se l'opzione di
shell nocasematch è abilitata, il confronto è
effettuato senza distinguere le maiuscole dalle minuscole nei caratteri
alfabetici. Se una parte qualsiasi del modello viene quotata, questa parte
viene usata letteralmente. Questo vuol dire che ogni carattere nella parte
quotata corrisponde a se stesso. Se il modello è memorizzato in una
variabile shell, quotare l'espansione della variabile forza una
corrispondenza letterale dell'intero modello. Le espressioni fra parentesi
nelle espressioni regolari devono essere trattate con attenzione,
poiché i normali caratteri di quotatura perdono il loro significato
quando sono fra parentesi graffe.
Il modello corrisponderà se corrisponde ad una parte
qualsiasi della stringa. Si può ancorare il modello usando gli
operatori delle espressioni regolari ^ e $ in modo da fare una
corrispondenza sull'intera stringa. La variabile vettore
BASH_REMATCH registra quali parti della stringa
corrispondono al modello. L'elemento di BASH_REMATCH
con indice 0 contiene la porzione di stringa che corrisponde all'intero
modello. Le sotto stringhe che corrispondono a sotto espressioni tra
parentesi dell'espressione regolare sono salvate negli indici rimanenti di
BASH_REMATCH. L'elemento BASH_REMATCH
con indice n è la porzione di stringa che corrisponde
alla n-esima sotto espressione tra parentesi. Bash imposta
BASH_REMATCH nell'ambiente globale; dichiararla come
variabile locale porterà a risultati imprevisti.
Le espressioni possono essere combinate usando i seguenti
operatori, elencati in ordine inverso di precedenza:
- ( espressione )
- Ritorna il valore di espressione. Questo può essere usato
per modificare la normale precedenza degli operatori.
- ! espressione
- Vero se espressione è falsa.
- espressione1
&& espressione2
- Vero se entrambe espressione1 e espressione2 sono vere.
- espressione1
|| espressione2
- Vero se almeno una fra espressione1 o espressione2 è
vera.
Gli operatori && e || non valutano
espressione2 se il valore di espressione1 è sufficiente
per determinare il valore di ritorno dell'intera espressione
condizionale.
- for nome [ [
in [ parola ... ] ] ; ] do lista ;
done
- La lista di parole che seguono in è espansa, generando una
lista di elementi. La variabile nome è impostata, di volta
in volta, a ciascun elemento di questa lista e lista è
eseguita ogni volta. Se la parola in è omessa, il
comando for esegue lista una volta per ogni parametro
posizionale esistente (si veda PARAMETRI più avanti).
Lo stato di ritorno è lo stato d'uscita dell'ultimo comando
eseguito. Se l'espansione degli elementi che seguono in risulta in
una lista vuota, non è eseguito alcun comando, e lo stato di
ritorno è 0.
- for (( espr1 ;
espr2 ; espr3 )) ; do lista ;
done
- Prima viene valutata l'espressione aritmetica espr1 in accordo con
le regole descritte più avanti sotto VALUTAZIONE
ARITMETICA. Viene quindi valutata ripetutamente l'espressione
aritmetica espr2 finché non assume il valore zero. Ogni
volta che espr2 è diverso da zero, lista viene
eseguita e l'espressione aritmetica espr3 viene valutata. Se
qualche espressione è omessa, si suppone che abbia il valore 1. Il
valore di ritorno è lo stato d'uscita dell'ultimo comando in
lista che è eseguito, o falso se una qualsiasi delle
espressioni non è valida.
- select nome
[ in parola ] ; do lista ; done
- La lista di parole che segue in è espansa, generando una
lista di elementi. L'insieme delle parole espanse è stampato sullo
standard error, ognuna preceduta da un numero. Se in parola
è omesso, sono stampati i parametri posizionali (si veda
PARAMETRI più avanti). Poi select
mostra il prompt PS3 e viene letta una riga dallo
standard input. Se la riga consiste di un numero corrispondente a una
delle parole mostrate, allora il valore di nome è impostato
a quella parola. Se la riga è vuota, le parole e il prompt sono
mostrati di nuovo. Se viene immesso EOF [CTRL-D], il comando termina e
restituisce 1. Qualsiasi altro valore letto fa sì che nome
sia impostato al valore nullo. La riga letta è salvata nella
variabile REPLY. La lista è eseguita
dopo ciascuna selezione fino a che non sia eseguito un comando
break. Lo stato d'uscita di select è lo stato
d'uscita dell'ultimo comando eseguito in lista, o zero se nessun
comando è stato eseguito.
- case parola
in [ [(] modello [ | modello ] ... )
lista ;; ] ... esac
- Un comando case prima espande parola, e poi prova a
confrontarla, di volta in volta, con ognuno dei modelli, usando le
regole di confronto descritte più avanti in Modelli di
ricerca. La parola è espansa usando espansione della
tilde, espansione di parametro e di variabile, espansione aritmetica,
sostituzione di comando, sostituzione di processo e rimozione della
quotatura. Ogni modello esaminato è espanso usando
espansione della tilde, espansione di parametro e di variabile, espansione
aritmetica, sostituzione di comando, sostituzione di processo e rimozione
della quotatura. Se l'opzione di shell nocasematch è
abilitata, il confronto è effettuato senza distinzione fra
maiuscole e minuscole nei caratteri alfabetici. Quando viene trovata una
corrispondenza, viene eseguita la lista ad essa abbinata. Se viene
usato l'operatore ;;, dopo il primo confronto riuscito non ne viene
tentato nessun altro. Usando ;& al posto di ;;
l'esecuzione continua con la lista associata alla successiva serie
di modelli. Se si usa ;;& al posto di ;; la shell
analizza il successivo modello di lista nell'istruzione, se ce n'è
qualcuno, ed esegue qualsiasi lista associata su una corrispondenza
andata a buon fine, continuando l'esecuzione dell'istruzione case come se
il modello di lista non avesse trovato corrispondenze. Lo stato d'uscita
è zero se nessun modello corrisponde. Altrimenti, è lo stato
d'uscita dell'ultimo comando eseguito in lista.
- if lista;
then lista; [ elif lista; then
lista; ] ... [ else lista; ] fi
- La lista dopo if è eseguita. Se il suo stato d'uscita
è 0, è eseguita la lista dopo then.
Altrimenti, è eseguita a turno ciascuna lista dopo
elif, e se il suo stato d'uscita è 0, è eseguita la
corrispondente lista dopo then e il comando termina.
Altrimenti, se presente, è eseguita, la lista dopo
else. Lo stato d'uscita è lo stato d'uscita dell'ultimo
comando eseguito, o zero se nessuna delle condizioni considerate è
risultata essere vera.
- while lista-1;
do lista-2; done
- until lista-1;
do lista-2; done
- Il comando while esegue ripetutamente la lista lista-2
finché l'ultimo comando nella lista lista-1 ritorna uno
stato di uscita di zero. Il comando until è identico al
comando while, con la sola differenza che il risultato del test
è negato: lista-2 è eseguita finché l'ultimo
comando in lista-1 ritorna uno stato d'uscita diverso da zero. Lo
stato d'uscita dei comandi while e until è lo stato
d'uscita dell'ultimo comando eseguito in lista-2, o zero se non ne
è stato eseguito alcuno.
Un coprocesso è un comando di shell preceduto dalla
parola riservata coproc. Un coprocesso viene eseguito in modo
asincrono in una subshell, come se il comando fosse stato terminato con
l'operatore di controllo &, con una pipe a due vie stabilita fra
la shell in esecuzione e il coprocesso.
La sintassi per un coprocesso è:
coproc [NOME] comando
[ridirezioni]
Questo crea un coprocesso chiamato NOME. comando
può essere un comando semplice o composto (vedi sopra). NOME
è un nome di variabile shell. Se NOME non è indicato,
il nome predefinito è COPROC.
La forma raccomandata per un coprocesso è
coproc [NOME] { comando [ridirezioni];
}
Questa forma è consigliata perché il comando
semplice risulta essere un coprocesso sempre chiamato COPROC, ed
è più semplice da usare e più completo che gli altri
comandi composti.
Se comando è un comando composto, NOME
è opzionale. La parola che segue coproc determina se viene
interpretata come nome di variabile o meno: è interpretata come
NOME se non è una parola riservata che introduce un comando
composto. Se comando è un comando semplice, allora NOME
non è permesso; questo per evitare confusione tra NOME e la
prima parola di un comando semplice.
Quando il coprocesso viene eseguito, la shell crea una variabile
vettore (si veda Vettori più avanti) chiamata NOME nel
contesto della shell in esecuzione. Lo standard output di comando
è connesso tramite una pipe a un descrittore di file nella shell in
esecuzione, e il descrittore di file è assegnato a NOME[0]. Lo
standard input di comando è connesso tramite una pipe a un
descrittore di file nella shell in esecuzione, e tale descrittore è
assegnato a NOME[1]. Questa pipe è costituita prima che
qualsiasi ridirezione venga specificata dal comando (si veda
RIDIREZIONE più avanti). I descrittori di file possono
essere utilizzati come argomenti per i comandi di shell e
ridirezioni usando comuni espansioni di parola. Oltre a quelli creati per
eseguire comandi e sostituzioni di processo, i descrittori di file non sono
disponibili nelle subshell.
L'ID del processo della shell figlia creata per eseguire il
coprocesso è disponibile come valore della variabile NOME_PID.
Il comando incorporato wait può essere usato per attendere che
il coprocesso sia terminato.
Poiché il coprocesso è creato come comando
asincrono, il comando coproc restituisce sempre successo. Lo stato di
ritorno di un coprocesso è lo stato di ritorno di comando.
Una funzione di shell è un oggetto che viene chiamato come
un comando semplice ed esegue un comando composto con una nuova serie di
parametri posizionali. Le funzioni di shell sono dichiarate in questo
modo:
- nomef ()
comando-composto [ridirezione]
- function
nomef [()] comando-composto [ridirezione]
- Qui sopra si definisce una funzione chiamata nomef. La parola
riservata function è opzionale. Se la parola riservata
function è fornita, le parentesi sono opzionali. Il
corpo della funzione è il comando composto
comando-composto (si veda Comandi composti sopra). Questo
comando è usualmente una lista di comandi fra { e }, ma
potrebbe essere qualsiasi comando elencato in precedenza, sotto Comandi
composti, con una eccezione: se viene usata la parola riservata
function ma non vengono fornite le parentesi, sono richieste le
parentesi graffe. comando-composto è eseguito ogni volta che
nomef è specificato come nome di un comando semplice. Quando
si è in modalità posix, nomef dev'essere un
nome di shell valido e non può essere il nome di uno dei
comandi interni speciali POSIX. Nella modalità predefinita,
un nome di funzione può essere qualsiasi parola di shell non
quotata che non contiene $. Ogni ridirezione (si veda
RIDIREZIONE più avanti) specificata quando
una funzione è definita viene effettuata quando quella funzione
viene eseguita. Lo stato d'uscita di una definizione di funzione è
0 tranne quando si verifica un errore di sintassi o una funzione in sola
lettura con lo stesso nome è già esistente. Quando eseguita,
lo stato d'uscita di una funzione è lo stato d'uscita dell'ultimo
comando eseguito nel corpo. (Si veda FUNZIONI più
avanti).
In una shell non interattiva, o in una shell interattiva in cui
l'opzione interactive_comments del comando incorporato shopt
è abilitata (si veda COMANDI INCORPORATI DELLA SHELL
più avanti), una parola che inizia con # fa sì
che la parola e tutti i rimanenti caratteri di quella riga siano ignorati.
Una shell interattiva senza l'opzione interactive_comments abilitata
non permette i commenti. L'opzione interactive_comments è
attiva in modo predefinito nelle shell interattive.
La quotatura è usata per togliere il significato
speciale, per la shell, di certi caratteri o parole. La quotatura può
essere usata per disabilitare il trattamento speciale per i caratteri
speciali, per impedire che le parole riservate siano riconosciute come tali,
e per prevenire l'espansione di parametro.
Ciascuno dei metacaratteri elencati prima sotto
DEFINIZIONI ha un significato speciale per la shell e
deve essere quotato se esso deve rappresentare se stesso.
Quando vengono usati i servizi per l'espansione della cronologia
dei comandi (si veda ESPANSIONE DELLA CRONOLOGIA più
avanti), il carattere di espansione della cronologia, in
genere !, dev'essere quotato per prevenire l'espansione della
cronologia.
Vi sono tre meccanismi di quotatura: caratteri di
protezione (escape), apostrofi e virgolette doppie.
Una barra inversa (\) non quotata è il carattere
di protezione. Esso attribuisce il valore letterale al successivo
carattere, con l'eccezione di <newline>. Se vi è una coppia
\<newline>, e la barra inversa non è quotata, il
\<newline> è trattato come una continuazione di riga
(cioè, è rimosso dal flusso di input e viene realmente
ignorato).
Racchiudendo dei caratteri tra apostrofi si conserva il valore
letterale di ogni carattere all'interno degli apostrofi. Un apostrofo non
può essere inserito tra apostrofi, nemmeno preceduto da una barra
inversa.
Racchiudere caratteri tra doppie virgolette conserva il valore
letterale di tutti i caratteri all'interno, con le eccezioni di $,
`, \ e, quando l'espansione della cronologia è
abilitata, !. Quando la shell è in modalità
posix, ! non ha un significato speciale quando è tra
doppie virgolette, anche quando l'espansione della cronologia è
abilitata. I caratteri $ e ` conservano il loro significato
speciale anche tra doppie virgolette. La barra inversa mantiene il suo
significato speciale solo quando seguita da uno dei seguenti caratteri:
$, `, ", \, o <newline>. Le
doppie virgolette possono essere contenute in una stringa fra doppie
virgolette facendole precedere da una barra inversa. Se abilitata,
l'espansione della cronologia viene effettuata a meno che un ! tra
doppie virgolette non venga protetto da una barra inversa. La barra inversa
che precede il ! non viene rimossa.
I parametri speciali * e @ hanno un significato
speciale quando sono tra doppie virgolette (si veda PARAMETRI
più avanti).
Parole della forma $'stringa' sono trattate come
varianti della quotatura con apice singolo. La parola espande in
stringa, coi caratteri protetti da una barra inversa sostituiti come
specificato dallo standard ANSI C. Le sequenze di protezione tramite la
barra inversa, se presenti, sono decodificate come segue:
- \a
- avviso (segnale acustico)
- \b
- backspace
- \e
- \E
- un carattere di escape
- \f
- salto pagina
- \n
- codice di fine riga (newline)
- \r
- ritorno carrello
- \t
- tabulazione orizzontale
- \v
- tabulazione verticale
- \\
- barra inversa
- \'
- apostrofo
- \"
- virgolette
- \?
- punto interrogativo
- \nnn
- il carattere a otto bit il cui valore è il valore ottale nnn
(da una a tre cifre ottali)
- \xHH
- il carattere a otto bit il cui valore è il valore esadecimale
HH (una o due cifre esadecimali)
- \uHHHH
- il carattere Unicode (ISO/IEC 10646) il cui valore è il valore
esadecimale HHHH (da una a quattro cifre esadecimali)
- \UHHHHHHHH
- il carattere Unicode (ISO/IEC 10646) il cui valore è il valore
esadecimale HHHHHHHH (da una a otto cifre esadecimali)
- \cx
- un carattere control-x
Il risultato espanso è racchiuso fra apostrofi come se il
segno del dollaro non fosse presente.
Una stringa fra doppie virgolette preceduta dal segno del dollaro
($"string") causa la traduzione della stringa
conformemente alla localizzazione corrente. L'infrastruttura gettext
effettua la ricerca e la traduzione usando le variabili di shell
LC_MESSAGES, TEXTDOMAINDIR e TEXTDOMAIN. Se la
localizzazione corrente è C o POSIX, o se non ci sono
traduzioni disponibili, il segno del dollaro viene ignorato. Poiché
questa è una forma di quotatura con doppie virgolette, la stringa
rimarrà tra doppie virgolette, che sia o meno tradotta e sostituita.
Se l'opzione noexpand_translation è abilitata usando il
comando incorporato shopt, allora le stringhe tradotte saranno
trattate come tra virgolette singole anziché doppie. Vedere la
descrizione di shopt più avanti sotto COMANDI
INCORPORATI DELLA SHELL.
Un parametro è una entità che contiene
valori. Può essere un nome, un numero o uno dei caratteri
speciali elencati più avanti sotto Parametri speciali. Una
variabile è un parametro indicato da un nome. Una
variabile ha un valore e zero o più attributi. Gli
attributi sono assegnati utilizzando il comando incorporato declare
(si veda declare più avanti in COMANDI INCORPORATI
DELLA SHELL).
Un parametro è impostato se a esso è stato assegnato
un valore. La stringa nulla è un valore valido. Una volta che una
variabile è impostata, essa può essere rimossa solo usando il
comando incorporato unset (si veda COMANDI INCORPORATI
DELLA SHELL più avanti).
Una variabile può essere assegnata da una istruzione
della forma
Se valore è omesso, alla variabile è
assegnata la stringa nulla. Tutti i valori sono sottoposti a
espansione della tilde, espansione di parametro e variabile, sostituzione di
comando, espansione aritmetica e rimozione dei caratteri di quotatura (si
veda ESPANSIONE più avanti). Se la variabile ha
il suo attributo integer impostato, allora valore è
valutato come un'espressione aritmetica anche se l'espansione del $((...))
non è utilizzata (si veda Espansione aritmetica più
avanti). La suddivisione in parole e l'espansione di percorso non sono
effettuati. Le istruzioni di assegnamento possono anche apparire come
argomenti per i comandi incorporati alias, declare,
typeset, export, readonly e local (comandi di
dichiarazione). Quando è in modalità posix, questi
comandi incorporati possono apparire in un comando dopo una o più
istanze del comando incorporato command e mantengono queste
proprietà dell'istruzione di assegnamento.
Nel contesto in cui un'istruzione di assegnamento sta assegnando
un valore a una variabile di shell o a un indice di vettore, l'operatore +=
può essere usato per accodare o aggiungere al precedente valore della
variabile. Questo comprende argomenti a comandi incorporati come
declare che accettano istruzioni di assegnamento (comandi di
dichiarazione). Quando += è applicato a una variabile per la
quale l'attributo integer è stato impostato, valore
è valutato come un'espressione aritmetica e aggiunto al valore
corrente della variabile, che è a sua volta valutata. Quando +=
è applicato a una variabile vettore usando un assegnamento composto
(si veda Vettori più avanti), il valore della variabile non
è rimosso (com'è quando si usa =), e nuovi valori sono
aggiunti alla fine del vettore iniziando dal massimo indice di vettore
aumentato di uno (per vettori indicizzati) o aggiunti come coppie
supplementari di valore-chiave in un vettore associativo. Quando applicato a
una variabile valutata come stringa, valore è espanso e
accodato al valore della variabile.
A una variabile può essere assegnato l'attributo
nameref con l'opzione -n dei comandi incorporati
declare o local (si veda più avanti la descrizione di
declare e local) per creare un nameref, o un
riferimento a un'altra variabile. Questo permette di manipolare le variabili
indirettamente. Ogni volta che la variabile nameref è referenziata o
ha avuto un assegnamento, l'operazione è eseguita effettivamente
sulla variabile specificata dal valore della variabile nameref. Un nameref
è usato comunemente all'interno di funzioni di shell per far
riferimento a una variabile il cui nome è passato come argomento alla
funzione. Per esempio, se un nome di variabile è passato alla
funzione di shell come il suo primo argomento, eseguendo
declare -n ref=$1
all'interno della funzione crea una variabile nameref ref
il cui valore è il nome della variabile passato al primo argomento.
Riferimenti e assegnamenti a ref sono trattati come riferimenti e
assegnamenti alla variabile il cui nome è stato passato come
$1. Se la variabile di controllo in un ciclo for ha
l'attributo nameref, la lista di parole può essere una lista di
variabili di shell, e verrà costituito un riferimento nome per ogni
parola della lista, a turno, quando viene eseguito il ciclo. Alle variabili
vettore non è possibile dare l'attributo -n. Comunque, le
variabili nameref possono far riferimento a variabili vettore e a variabili
vettore indicizzate. I nameref possono essere annullati usando l'opzione
-n del comando incorporato unset. Altrimenti, se unset
viene eseguito col nome di una variabile nameref come argomento, la
variabile a cui fa riferimento la variabile nameref verrà
annullata.
Un parametro posizionale è un parametro il cui nome
è indicato da una o più cifre, diverse dalla singola cifra 0.
I parametri posizionali sono assegnati dagli argomenti della shell quando
questa è invocata, e possono essere riassegnati usando il comando
incorporato set. I parametri posizionali non possono essere assegnati
con istruzioni di assegnamento. I parametri posizionali sono temporaneamente
sostituiti quando è eseguita una funzione di shell (si veda
FUNZIONI più avanti).
Quando si espande un parametro posizionale composto da più
di una sola cifra, esso deve essere racchiuso tra parentesi graffe (si veda
ESPANSIONE più avanti).
La shell tratta molti parametri in modo speciale. Questi parametri
possono solo essere referenziati; la loro modifica non è
permessa.
- *
- Si espande nei parametri posizionali, a partire dal primo. Quando
l'espansione non è tra doppie virgolette, ogni parametro
posizionale si espande in una parola separata. In contesti in cui è
effettuata, queste parole sono soggette a successiva suddivisione in
parole ed espansione di percorso. Quando l'espansione avviene tra doppie
virgolette, si espande in una singola parola contenente il valore di
ciascun parametro separato dagli altri dal primo carattere della variabile
speciale IFS. Cioè, "$*"
è equivalente a
"$1c$2c...", dove c
è il primo carattere del valore della variabile IFS.
Se IFS viene annullata, i parametri sono
separati da spazi. Se IFS è nulla, i
parametri sono uniti senza alcun separatore.
- @
- Si espande nei parametri posizionali, a partire dal primo. In contesti in
cui è effettuata la suddivisone in parole, questo espande ogni
parametro posizionale in una parola separata; se non è tra doppie
virgolette, queste parole sono soggette a suddivisione in parole. In
contesti in cui non è effettuata la suddivisione in parole. questo
si espande una parola singola con ogni parametro posizionale separato da
spazio. Quando l'espansione avviene tra doppie virgolette, ogni parametro
si espande in una parola separata. Cioè, "$@"
è equivalente a "$1" "$2" ... Se
l'espansione fra doppie virgolette avviene all'interno di una parola,
l'espansione del primo parametro è unita con la parte iniziale
della parola originale, e l'espansione dell'ultimo parametro è
unita con la parte finale della parola originale. Quando non vi è
alcun parametro posizionale, "$@" e $@ si
espandono come stringa nulla (cioè, sono rimossi).
- #
- Si espande nel numero di parametri posizionali espresso come numero
decimale.
- ?
- Si espande nello stato di uscita della pipeline eseguita più
recentemente senza rilasciare il controllo del terminale.
- -
- Si espande nei flag di opzione correnti come specificato in base
all'invocazione, dal comando incorporato set, o in quelli impostati
dalla shell stessa (come l'opzione -i).
- $
- Si espande nell'ID di processo della shell. In una subshell, si espande
nell'ID di processo della shell corrente, non in quello della
subshell.
- !
- Si espande nell'ID di processo del job più recentemente messo in
background, se eseguito come comando asincrono o usando il comando
incorporato bg (si veda JOB CONTROL più
avanti).
- 0
- Si espande nel nome della shell o script di shell. Questo è
impostato alla inizializzazione della shell. Se bash è
chiamata con un file di comandi, $0 è impostato al nome di
quel file. Se bash è avviata con l'opzione -c, allora
$0 è impostato al primo argomento dopo la stringa che deve
essere eseguita, se presente. Altrimenti, è impostato al nome-file
usato per chiamare bash, come dato dall'argomento zero.
Le seguenti variabili sono impostate dalla shell:
- _
- All'avvio della shell, impostato al nome di percorso usato per invocare la
shell o lo script di shell che è eseguito come passato
nell'ambiente o nella lista di argomenti. Successivamente, si espande
nell'ultimo argomento del precedente comando semplice eseguito in primo
piano, dopo l'espansione. È anche impostato al nome completo usato
per invocare ogni comando eseguito e messo nell'ambiente esportato verso
quel comando. Mentre si controlla la posta, questo parametro contiene il
nome del file del messaggio attualmente in esame.
- BASH
- Si espande al nome-file completo usato per chiamare questa istanza di
bash.
- BASHOPTS
- Una lista di opzioni di shell abilitate separate da un due punti. Ogni
parola della lista è un argomento valido per l'opzione -s
del comando incorporato shopt (si veda COMANDI
INCORPORATI DELLA SHELL più avanti). Le opzioni che
appaiono in BASHOPTS sono quelle contrassegnate come
on da shopt. Se questa variabile è nell'ambiente
quando bash viene avviato, ogni opzione di shell nella lista
sarà abilitata prima della lettura di qualsiasi file di avvio.
Questa variabile è di sola lettura.
- BASHPID
- Espande all'ID del processo dell'attuale bash. In determinate
circostanze, ciò differisce da $$, come nel caso di subshell
che non richiedono che bash sia reinizializzato. Assegnamenti a
BASHPID non hanno alcun effetto. Se BASHPID
viene annullata, perde le sue proprietà speciali, anche se è
poi reimpostata.
- BASH_ALIASES
- Una variabile vettore associativo i cui elementi corrispondono alla lista
interna di alias come conservati dal comando incorporato alias. Gli
elementi aggiunti a questo vettore appaiono nella lista degli alias;
comunque, togliendo elementi al vettore attualmente gli alias non vengono
rimossi dalla lista. Se BASH_ALIASES viene annullata, perde le sue
proprietà speciali, anche se è poi reimpostata.
- BASH_ARGC
- Una variabile vettore i cui valori sono il numero di parametri in ogni
frame del corrente stack delle chiamate di esecuzione di bash. Il
numero di parametri della subroutine corrente (funzione di shell o script
eseguito con . o source) è in cima allo stack. Quando
viene eseguita una subroutine, il numero di parametri passati è
messo in cima a BASH_ARGC. La shell imposta
BASH_ARGC solo quando è in modalità
estesa di debugging (si veda la descrizione dell'opzione extdebug
per il comando incorporato shopt più avanti). Impostare
extdebug dopo che la shell ha iniziato a eseguire uno script, o
referenziare questa variabile quando extdebug non è
impostato, può dar luogo a valori incongruenti.
- BASH_ARGV
- Una variabile vettore contenente tutti i parametri nel corrente stack
delle chiamate di esecuzione di bash. Il parametro finale
dell'ultima chiamata di subroutine è in cima allo stack; il primo
parametro della chiamata iniziale è in fondo. Quando una subroutine
viene eseguita, i parametri forniti sono messi in cima a
BASH_ARGV. La shell imposta BASH_ARGV
solo quando è in modalità estesa di debugging (si veda
la descrizione dell'opzione extdebug al comando incorporato
shopt più avanti). Impostare extdebug dopo che la
shell ha iniziato a eseguire uno script, o referenziare questa variabile
quando extdebug non è impostato, può dar luogo a
valori incongruenti.
- BASH_ARGV0
- Quando referenziata, questa variabile espande nel nome della shell o
script di shell (identico a $0; si veda sopra la descrizione del
parametro speciale 0). L'assegnamento a BASH_ARGV0 fa sì che
il valore assegnato sia assegnato anche a $0. Se BASH_ARGV0
viene annullata, perde le sue proprietà speciali, anche se è
poi reimpostata.
- BASH_CMDS
- Una variabile vettore associativo i cui elementi corrispondono alla
tabella hash interna di comandi come memorizzati dal comando incorporato
hash. Gli elementi aggiunti a questo vettore appaiono nella tabella
hash; comunque, togliendo elementi al vettore i nomi dei comandi non
saranno rimossi dalla tabella hash. Se BASH_CMDS viene annullata,
perde le sue proprietà speciali, anche se è successivamente
reimpostata.
- BASH_COMMAND
- Il comando attualmente in esecuzione o in procinto di essere eseguito, a
meno che la shell non stia eseguendo un comando come risultato di
un'intercettazione di segnale (trap), nel qual caso è il comando in
esecuzione al momento dell'intercettazione. Se BASH_COMMAND viene
annullata, perde le sue proprietà speciali, anche se è poi
reimpostata.
- BASH_EXECUTION_STRING
- L'argomento dell'opzione -c all'invocazione del comando.
- BASH_LINENO
- Una variabile vettore i cui elementi sono i numeri di riga nei file di
origine dove ogni elemento corrispondente di FUNCNAME
è stato chiamato. ${BASH_LINENO[$i]}
è il numero di riga nel file di origine
(${BASH_SOURCE[$i+1]}) dove
${FUNCNAME[$i]} è stato chiamato (o
${BASH_LINENO[$i-1]} se referenziato all'interno di
un'altra funzione di shell). Usare LINENO per ottenere
il numero di riga corrente.
- BASH_LOADABLES_PATH
- Un elenco di directory, separate da due punti, nelle quali la shell cerca
i comandi incorporati caricabili dinamicamente specificati dal comando
enable.
- BASH_REMATCH
- Una variabile vettore i cui elementi sono assegnati dall'operatore binario
=~ del comando condizionale [[. L'elemento con indice 0
è la porzione della stringa che corrisponde all'intera espressione
regolare. L'elemento con indice n è la porzione della
stringa che corrisponde alla n-sima sottoespressione fra
parentesi.
- BASH_SOURCE
- Una variabile vettore i cui elementi sono i nomi-file dove sono definiti i
nomi delle corrispondenti funzioni di shell nella variabile
FUNCNAME. La funzione di shell
${FUNCNAME[$i]} è definita nel file
${BASH_SOURCE[$i]} ed è chiamata da
${BASH_SOURCE[$i+1]}.
- BASH_SUBSHELL
- Incrementato di uno all'interno di ciascuna subshell o ambiente di
subshell quando la shell inizia a essere eseguita in quell'ambiente. Il
valore iniziale è 0. Se BASH_SUBSHELL viene annullata, perde
le sue proprietà speciali, anche se è poi reimpostata.
- BASH_VERSINFO
- Una variabile vettore in sola lettura i cui elementi danno informazioni
sulla versione di quest'istanza di bash. I valori assegnati ai
membri del vettore sono come segue:
- BASH_VERSION
- Si espande in una stringa che descrive la versione di questa istanza di
bash.
- COMP_CWORD
- Un indice in ${COMP_WORDS} della parola contenente la posizione
corrente del cursore. Questa variabile è disponibile solo nelle
funzioni di shell invocate dalle risorse di completamento programmabile
(si veda Completamento programmabile più avanti).
- COMP_KEY
- Il tasto (o il tasto finale di una sequenza) usato per invocare la
funzione di completamento corrente.
- COMP_LINE
- La riga di comando corrente. Questa variabile è disponibile solo
nelle funzioni di shell e nei comandi esterni invocati dai servizi di
completamento programmabile (si veda Completamento programmabile
più avanti).
- COMP_POINT
- L'indice della posizione corrente del cursore relativa all'inizio del
comando corrente. Se la posizione corrente del cursore è alla fine
del comando corrente, il valore di questa variabile è uguale a
${#COMP_LINE}. Questa variabile è disponibile solo nelle
funzioni di shell e comandi esterni invocati dai servizi di completamento
programmabile (si veda Completamento programmabile più
avanti).
- COMP_TYPE
- Impostata a un valore intero corrispondente al tipo di completamento
tentato che ha causato la chiamata di una funzione di completamento:
TAB, per il completamento normale, ?, per l'elenco dei
completamenti dopo tabulazioni successive, !, per l'elenco delle
alternative di completamento di una parte di parola, @, per
elencare i completamenti se la parola non ha subito modifiche, o %,
per il menù del completamento. Questa variabile è
disponibile solo nelle funzioni di shell e nei comandi esterni invocati
dai servizi di completamento programmabile (si veda Completamento
programmabile più avanti).
- COMP_WORDBREAKS
- L'insieme dei caratteri che la libreria readline tratta come
separatori di parola nell'effettuare il completamento di parola. Se
COMP_WORDBREAKS viene annullata, perde le sue
proprietà speciali, anche se è poi reimpostata.
- COMP_WORDS
- Una variabile vettore (si veda Vettori più avanti) che
è composta dalle singole parole nella riga di comando corrente. La
riga è divisa in parole come readline la dividerebbe usando
COMP_WORDBREAKS come descritto precedentemente.
Questa variabile è disponibile solo nelle funzioni di shell e
comandi esterni invocati dai servizi di completamento programmabile (si
veda Completamento programmabile più avanti).
- COPROC
- Una variabile vettore (si veda Vettori più avanti) creata
per contenere i descrittori di file di uscita e di entrata di un
coprocesso senza nome (si veda Coprocessi più avanti).
- DIRSTACK
- Una variabile vettore (si veda Vettori più avanti) che
contiene il contenuto corrente dello stack delle directory. Le directory
appaiono nello stack nell'ordine in cui sono mostrate dal comando
incorporato dirs. L'assegnamento agli elementi di questa variabile
vettore può essere usato per modificare le directory già
nello stack, ma i comandi incorporati pushd e popd devono
essere usati per aggiungere e rimuovere directory. L'assegnamento a questa
variabile non cambia la directory corrente. Se DIRSTACK
viene annullata, perde le sue proprietà speciali, anche se
è poi reimpostata.
- EPOCHREALTIME
- Ogni volta che questo parametro è referenziato, espande al numero
di secondi a partire dall'epoca Unix (si veda time(3)) come valore
in virgola mobile con grado di precisione di microsecondi. Gli
assegnamenti a EPOCHREALTIME vengono ignorati. Se
EPOCHREALTIME viene annullata, perde le sue
proprietà speciali, anche se è poi reimpostata.
- EPOCHSECONDS
- Ogni volta che questo parametro è referenziato, espande a un numero
di secondi trascorsi dall'epoca Unix (si veda time(3)).
Assegnamenti a EPOCHSECONDS vengono ignorati. Se
EPOCHSECONDS è annullata, perde le sue
proprietà speciali, anche se è poi reimpostata.
- EUID
- Espande all'ID-utente effettivo dell'utente corrente, inizializzata
all'avvio della shell. Questa variabile è in sola lettura.
- FUNCNAME
- Una variabile vettore contenente i nomi di tutte le funzioni di shell
attualmente nello stack delle chiamate di esecuzione. L'elemento con
indice 0 è il nome della funzione di shell attualmente in
esecuzione. L'elemento più in basso di tutti (quello con l'indice
più alto) è "main". Questa variabile esiste solo
quando è in esecuzione una funzione di shell. Assegnamenti a
FUNCNAME non hanno alcun effetto. Se
FUNCNAME viene annullata, perde le sue proprietà
speciali, anche se è poi reimpostata.
Questa variabile può essere usata con
BASH_LINENO e BASH_SOURCE. Ogni elemento di
FUNCNAME ha elementi corrispondenti in BASH_LINENO e
BASH_SOURCE per descrivere lo stack delle chiamate. Per esempio,
${FUNCNAME[$i]} è stato chiamato dal file
${BASH_SOURCE[$i+1]} al numero di riga
${BASH_LINENO[$i]}. Il comando incorporato
caller visualizza lo stack corrente delle chiamate usando questa
informazione.
- GROUPS
- Una variabile vettore contenente l'elenco dei gruppi dei quali è
membro l'utente corrente. Assegnamenti a GROUPS non hanno
alcun effetto. Se GROUPS viene annullata, perde le
sue proprietà speciali, anche se è poi
reimpostata.
- HISTCMD
- Il numero di cronologia, o indice nella lista della cronologia, del
comando corrente. Gi assegnamenti a HISTCMD vengono
ignorati. Se HISTCMD viene annullata, perde le sue
proprietà speciali, anche se è poi reimpostata.
- HOSTNAME
- Automaticamente impostata al nome dell'host corrente.
- HOSTTYPE
- Automaticamente impostata a una stringa che univocamente descrive il tipo
di macchina su cui bash è in esecuzione. Il valore
predefinito è dipendente dal sistema.
- LINENO
- Ogni volta che questo parametro è referenziato, la shell gli
assegna un numero decimale che rappresenta il numero di sequenza della
riga corrente (partendo da 1) all'interno di uno script o funzione. Quando
non in uno script o funzione, non è garantito che il valore
restituito sia significativo. Se LINENO viene annullata,
perde le sue proprietà speciali, anche se è poi
reimpostata.
- MACHTYPE
- Automaticamente impostata a una stringa che descrive completamente il tipo
di sistema sul quale bash è in esecuzione, nel formato
standard GNU cpu-company-system. Il valore predefinito è
dipendente dal sistema.
- MAPFILE
- Una variabile vettore (si veda Vettori più avanti) creata
per contenere il testo letto dal comando incorporato mapfile quando
non viene fornito un nome di variabile.
- OLDPWD
- La precedente directory di lavoro come impostata dal comando
cd.
- OPTARG
- Il valore dell'ultimo argomento opzione elaborato dal comando incorporato
getopts (si veda NCORPORATI DELLA SHELL più
avanti).
- OPTIND
- L'indice del prossimo argomento che dev'essere elaborato dal comando
incorporato getopts (si veda COMANDI INCORPORATI DELLA
SHELL più avanti).
- OSTYPE
- Automaticamente impostata a una stringa che descrive il sistema operativo
su cui bash è in esecuzione. Il valore predefinito è
dipendente dal sistema.
- PIPESTATUS
- Una variabile vettore (si veda Vettori più avanti)
contenente un elenco di valori di stato d'uscita dai processi nelle
pipeline eseguite più recentemente in primo piano [cioè
senza rilasciare il controllo del terminale] (può contenere anche
un solo comando).
- PPID
- L'ID di processo del genitore della shell. Questa variabile è in
sola lettura.
- PWD
- La directory di lavoro corrente come impostata dal comando cd.
- RANDOM
- Ogni volta che questo parametro è referenziato, si espande a un
numero intero casuale fra 0 e 32767. Assegnando un valore a
RANDOM viene inizializzata (seed) la sequenza di
numeri casuali. Se RANDOM viene annullata, perde le
sue proprietà speciali, anche se è poi reimpostata.
- READLINE_ARGUMENT
- Qualsiasi argomento numerico che è stato dato al comando readline
definito usando "bind -x" (si veda COMANDI INCORPORATI
DELLA SHELL più avanti) quando è stato
richiamato.
- READLINE_LINE
- Il contenuto del buffer di riga readline per l'uso con "bind
-x" (si veda COMANDI INCORPORATI DELLA SHELL più
avanti).
- READLINE_MARK
- La posizione della marcatura (punto di inserzione) nel buffer di riga
readline per l'uso con "bind -x" (si veda
COMANDI INCORPORATI DELLA SHELL più avanti). I
caratteri tra il punto d'inserzione e la marcatura vengono spesso
chiamati cumulativamente regione.
- READLINE_POINT
- La posizione del punto di inserzione nel buffer di riga readline
per l'uso con "bind -x" (si veda COMANDI INCORPORATI
DELLA SHELL più avanti).
- REPLY
- Impostata alla riga di input letta dal comando incorporato read
quando nessun argomento è specificato.
- SECONDS
- Ogni volta che questo parametro è referenziato, viene restituito il
numero di secondi trascorsi dall'avvio della shell. Se un valore è
assegnato a SECONDS, il valore restituito in base ai
riferimenti successivi è il numero di secondi trascorsi
dall'assegnamento più il valore assegnato. Il numero di secondi
all'invocazione della shell e il tempo corrente sono sempre determinati da
una richiesta all'orologio di sistema. Se SECONDS viene
annullata, perde le sue proprietà speciali, anche se è
poi reimpostata.
- SHELLOPTS
- Una lista, separata da due punti, di opzioni di shell abilitate. Ogni
parola nella lista è un argomento valido per l'opzione -o al
comando incorporato set (si veda COMANDI INCORPORATI
DELLA SHELL più avanti). Le opzioni che appaiono in
SHELLOPTS sono quelle indicate come on da
set -o. Se questa variabile è nell'ambiente quando
bash viene avviata, ogni opzione di shell nella lista viene
abilitata prima di leggere un qualsiasi file di avvio. Questa variabile
è in sola lettura.
- SHLVL
- È incrementata di uno ogni volta che una istanza di bash
viene avviata.
- SRANDOM
- Questa variabile viene espansa con un numero pseudo casuale di 32 bit ogni
volta che viene referenziata. Su sistemi che supportano
/dev/urandom o arc4random il generatore di
numeri casuali non è lineare, quindi ogni numero restituito non ha
relazione con i precedenti. Il generatore di numeri casuali non accetta un
seme, quindi assegnamenti a questa variabile non hanno effetto. Se
SRANDOM viene annullata, perde le sue
proprietà speciali anche se viene successivamente
reimpostata.
- UID
- Si espande all'ID-utente dell'utente corrente, inizializzato all'avvio
della shell. Questa variabile è in sola lettura.
Le seguenti variabili sono usate dalla shell. In alcuni casi,
bash assegna un valore predefinito a una variabile; questi casi sono
elencati più avanti.
- BASH_COMPAT
- Il valore è usato per impostare il livello di compatibilità
della shell. Si veda MODALITÀ COMPATIBILE DELLA SHELL
per una descrizione dei diversi livelli di compatibilità e
dei loro effetti. Il valore può essere un numero decimale (p.es.,
4.2) o intero (p.es., 42) corrispondente al livello di
compatibilità desiderato. Se BASH_COMPAT non è
impostato o è impostato alla stringa vuota, il livello di
compatibilità è impostato a quello predefinito per la
versione corrente. Se BASH_COMPAT è impostato a un valore
che non è uno dei livelli di compatibilità validi, la shell
stampa un messaggio di errore e imposta il livello di compatibilità
a quello predefinito per la versione corrente. I valori validi
corrispondono ai livelli di compatibilità descritti più
avanti in MODALITÀ COMPATIBILE DELLA SHELL. Per
esempio, 4.2 e 42 sono valori validi che corrispondono all'opzione
shopt compat42 e impostano il livello di
compatibilità a 42. La versione corrente è anch'esso un
valore valido.
- BASH_ENV
- Se questo parametro è impostato quando bash sta eseguendo
uno script di shell, il suo valore è interpretato come un nome-file
contenente comandi per inizializzare la shell, come in ~/.bashrc.
Il valore di BASH_ENV è soggetto a espansione di
parametro, sostituzione di comando ed espansione aritmetica prima
di essere interpretato come un nome-file. PATH non è
usato per cercare il nome-file risultante.
- BASH_XTRACEFD
- Se impostata a un valore intero corrispondente a un descrittore di file
valido, bash scriverà l'output della traccia generata quando
set -x è abilitato a quel descrittore di file. Il
descrittore di file viene chiuso quando BASH_XTRACEFD non
è impostata o le viene assegnato un nuovo valore.
Annullando BASH_XTRACEFD o assegnandole una stringa
vuota l'output della traccia verrà inviato allo standard
error. Da notare che impostando BASH_XTRACEFD a 2 (il
descrittore di file dello standard error) e, successivamente,
azzerandola il risultato sarà la chiusura dello standard
error.
- CDPATH
- Il percorso di ricerca per il comando cd. Questo è un elenco
di directory, separate da due punti, nelle quali la shell cerca le
directory di destinazione specificate dal comando cd. Un valore di
esempio è ".:~:/usr".
- CHILD_MAX
- Imposta il numero di valori dello stato di uscita delle shell figlie da
tenere in memoria. Bash non permette che questo valore scenda al di sotto
di un minimo imposto da POSIX, e c'è un valore massimo (attualmente
8192) che non può essere superato. Il valore minimo è
dipendente dal sistema.
- COLUMNS
- Usata dal comando composto select per determinare il numero di
colonne del terminale nella stampa delle liste di selezione.
Automaticamente impostata se l'opzione checkwinsize è
abilitata o è in una shell interattiva al ricevimento di un segnale
SIGWINCH.
- COMPREPLY
- Una variabile vettore dalla quale bash legge i possibili
completamenti generati da una funzione di shell invocata dal servizio di
completamento programmabile (si veda Completamento programmabile
più avanti). Ogni elemento di vettore contiene un completamento
possibile.
- EMACS
- Se bash trova questa variabile d'ambiente alla partenza della shell
col valore "t", presume che la shell sia in esecuzione in un
buffer di shell Emacs e disabilita la modifica della riga.
- ENV
- È espansa ed eseguita similarmente a BASH_ENV (si
veda INVOCAZIONE sopra) quando una shell interattiva viene
invocata in modalità posix.
- EXECIGNORE
- Una lista separata da virgole di modelli di shell (si veda Modelli di
ricerca) che definisce l'elenco dei nomi di file da ignorare durante
la ricerca dei comandi che usa PATH. I file per i quali il percorso
completo corrisponde ad uno di questi modelli non sono considerati file
eseguibili per lo scopo di completare il comando o per l'esecuzione di
comandi tramite ricerca in PATH. Questo non cambia il comportamento
dei comandi [, test, e [[. I percorsi completi nella
tabella hash dei comandi non sono soggetti a EXECIGNORE. Usare
questa variabile per ignorare file di librerie condivise che hanno il bit
eseguibile attivo, ma non sono file eseguibili. La corrispondenza al
modello fa uso dell'opzione di shell extglob.
- FCEDIT
- L'editor predefinito per il comando incorporato fc.
- FIGNORE
- Una lista di suffissi, separati da due punti, da ignorare quando si
effettua il completamento del nome-file (si veda READLINE
più avanti). Un nome-file il cui suffisso corrisponde a una
delle voci in FIGNORE è escluso dalla lista
dei nomi-file individuati. Un valore di esempio è ".o:~"
(La quotatura è necessaria quando si assegna un valore a questa
variabile, che contiene delle tilde).
- FUNCNEST
- Se impostato a un valore numerico maggiore di 0, definisce un livello
massimo di nidificazione per una funzione. Invocazioni di funzione
eccedenti questo livello provocheranno l'interruzione del comando
corrente.
- GLOBIGNORE
- Una lista di modelli, separati da due punti, che definiscono l'insieme dei
nomi di file che l'espansione del nome di percorso deve ignorare. Se un
nome di file individuato da un modello di espansione del percorso
corrisponde anche a uno dei modelli in GLOBIGNORE viene
rimosso dalla lista dei nomi da individuare.
- HISTCONTROL
- Una lista di valori, separati da due punti, che controllano come i comandi
vengono salvati nell'elenco della cronologia. Se la lista di valori
include ignorespace, le righe che iniziano con un carattere di
spazio non vengono salvate nell'elenco della cronologia. Un valore
di ignoredups fa sì che non venga salvata ogni riga uguale
all'elemento precedente della cronologia. Un valore di ignoreboth
è la combinazione di ignorespace e ignoredups. Un
valore di erasedups fa sì che tutte le righe uguali alla
riga corrente vengano rimosse dall'elenco della cronologia prima che la
riga venga salvata. Qualsiasi valore che non è nella lista di cui
sopra è ignorato. Se HISTCONTROL non è
impostato o non include un valore valido, tutte le righe lette
dall'analizzatore sintattico della shell sono salvate nell'elenco della
cronologia, a meno che non sia stato specificato HISTIGNORE.
La seconda riga e le successive di un comando composto multiriga
non vengono controllate, e sono aggiunte alla cronologia indipendentemente
dal valore di HISTCONTROL.
- HISTFILE
- Il nome del file nel quale è salvata la cronologia dei comandi (si
veda CRONOLOGIA più avanti). Il valore predefinito
è ~/.bash_history. Se è annullato la
cronologia dei comandi non è salvata al termine di una shell.
- HISTFILESIZE
- Il numero massimo di righe contenute nel file della cronologia. Quando a
questa variabile è assegnato un valore, il file della cronologia
è accorciato, se necessario, per contenere non più di quel
numero di righe rimuovendo le voci più vecchie. Il file della
cronologia è inoltre troncato a questa dimensione dopo la scrittura
al termine di una shell. Se il valore è 0, il file della cronologia
è troncato alla dimensione zero. Valori non numerici e valori
numerici minori di zero inibiscono il troncamento. La shell imposta il
valore predefinito al valore di HISTSIZE dopo la lettura di un file di
avvio.
- HISTIGNORE
- Una lista di modelli separati da due punti usata per decidere quali righe
di comando devono essere salvate nell'elenco della cronologia. Ogni
modello comincia all'inizio della riga e deve corrispondere alla riga
completa (nessun `*' implicito è aggiunto). Ogni modello
è confrontato con la riga dopo che i controlli specificati da
HISTCONTROL sono stati applicati. In aggiunta ai
normali modelli di shell che confrontano caratteri, `&' designa
la linea precedente della cronologia. `&' può essere
protetto usando una barra inversa; la barra inversa è rimossa prima
di eseguire un confronto. La seconda riga e le successive di un comando
composto multiriga non vengono controllate, e sono aggiunte alla
cronologia indipendentemente dal valore di HISTIGNORE. Il
modello di ricerca rispetta l'impostazione dell'opzione di shell
extglob .
- HISTSIZE
- Il numero di comandi da tenere in memoria nella cronologia dei comandi (si
veda HISTORY più avanti). Se il valore è 0, i
comandi non vengono salvati nell'elenco della cronologia. Con
valori numerici minori di zero ogni comando viene salvato nell'elenco
della cronologia (non ci sono limiti). La shell imposta il valore
predefinito a 500 dopo aver letto i file d'inizializzazione.
- HISTTIMEFORMAT
- Se questa variabile è impostata e non nulla, il suo valore è
usato come stringa di formato per strftime(3) per stampare la
marcatura oraria associata a ogni voce della cronologia mostrata dal
comando incorporato history. Se questa variabile è
impostata, data e ora verranno scritte nel file della cronologia in modo
da essere disponibili anche in successive sessioni della shell. Per
distinguere la marcatura oraria dalle altre righe della cronologia viene
usato il carattere di commento.
- HOME
- La home directory dell'utente corrente; l'argomento predefinito per il
comando incorporato cd. Il valore di questa variabile è
anche usata quando si effettua l'espansione della tilde.
- HOSTFILE
- Contiene il nome di un file nello stesso formato di /etc/hosts che
dovrà essere letto quando la shell ha bisogno di completare un nome
di host. La lista dei possibili completamenti di nome di host può
essere cambiata mentre la shell è in esecuzione; alla prossima
occasione in cui si tenta il completamento del nome di host dopo che
è cambiato il valore, bash aggiunge il contenuto del nuovo
file alla lista esistente. Se HOSTFILE è impostato ma
non ha alcun valore, o non contiene il nome di un file leggibile,
bash tenta di leggere /etc/hosts per ottenere la lista dei
possibili completamenti del nome di host. Quando HOSTFILE
viene annullata, la lista dei nomi di host viene pure
annullata.
- IFS
- L'Internal Field Separator (separatore di campo interno) è
usato per la suddivisione in parole dopo l'espansione e per dividere le
righe in parole quando si esegue il comando incorporato read. Il
valore predefinito è
“<space><tab><newline>”.
- IGNOREEOF
- Controlla l'azione della shell al ricevimento di un carattere
EOF come unico contenuto di una riga di input. Se
impostato, il valore è il numero di caratteri EOF
consecutivi da battere come primo carattere su una riga di input
prima che bash esca. Se la variabile esiste ma non ha un valore
numerico, o non ha alcun valore, il valore predefinito è 10. Se non
esiste, EOF indica la fine dell'input per la
shell.
- INPUTRC
- Il nome-file per il file di avvio di readline che prevale sul
valore predefinito che è ~/.inputrc (si veda
READLINE più avanti).
- INSIDE_EMACS
- Se questa variabile appare nell'ambiente quando la shell viene avviata,
bash assume che sia in esecuzione dentro un buffer shell Emacs e
potrebbe disabilitare l'editor della riga, a seconda dal valore di
TERM.
- LANG
- Usata per determinare la categoria di localizzazione per qualsiasi
categoria non specificatamente indicata da una delle variabili che
iniziano con LC_.
- LC_ALL
- Questa variabile prevale sul valore di LANG e su qualsiasi
altra variabile LC_ che specifichi una categoria di
localizzazione.
- LC_COLLATE
- Questa variabile determina l'ordine di collazione usato quando vengono
ordinati i risultati dell'espansione di nome di percorso, e determina il
comportamento di espressioni di intervallo, classi di equivalenza e
sequenze di ordinamento all'interno dell'espansione di nome di percorso e
della corrispondenza tra stringhe.
- LC_CTYPE
- Questa variabile determina l'interpretazione di caratteri e il
comportamento di classi di caratteri all'interno dell'espansione di nome
di percorso e della corrispondenza tra stringhe.
- LC_MESSAGES
- Questa variabile determina la localizzazione usata per tradurre stringhe
tra doppie virgolette precedute da un $.
- LC_NUMERIC
- Questa variabile determina la categoria di localizzazione usata per la
formattazione dei numeri.
- LC_TIME
- Questa variabile determina la categoria di localizzazione usata per la
formattazione di data e ora.
- LINES
- Usato dal comando composto select per determinare il numero di
linee del terminale nella stampa delle liste di selezione. Automaticamente
impostata se l'opzione checkwinsize è abilitata o in una
shell interattiva al ricevimento di un segnale
SIGWINCH.
- MAIL
- Se questo parametro è impostato a un nome di file o di directory e
la variabile MAILPATH non è impostata, bash
informa l'utente dell'arrivo di posta nel file specificato o nella
directory del formato Maildir.
- MAILCHECK
- Specifica la frequenza (in secondi) con cui bash controlla la
posta. Il valore predefinito è 60 secondi. Quando è il
momento di controllare la posta, la shell lo fa prima di mostrare il
prompt primario. Se questa variabile non è impostata o è
impostata a un valore che non sia un numero maggiore o uguale a zero, la
shell disabilita il controllo della posta.
- MAILPATH
- Una lista di nomi-file separati da due punti, da usare per il controllo
della posta. Il messaggio che deve essere stampato all'arrivo dei messaggi
in un particolare file può essere specificato separando il
nome-file dal messaggio con un `?'. Quando viene usato nel testo del
messaggio $_ è espanso al nome del file di posta corrente.
Per esempio:
MAILPATH='/var/mail/bfox?"You have
mail":~/shell-mail?"$_ has mail!"'
Bash può essere configurato per fornire un valore
predefinito per questa variabile (non c'è nessun valore predefinito),
ma il posizionamento dei file di posta degli utenti utilizzato è
dipendente dal sistema (per esempio, /var/mail/$USER).
- OPTERR
- Se impostato al valore 1, bash mostra i messaggi di errore generati
dal comando incorporato getopts (si veda COMANDI
INCORPORATI DELLA SHELL più avanti).
OPTERR è inizializzato ad 1 ogni volta che
viene invocata la shell o viene eseguito uno script di shell.
- PATH
- Il percorso di ricerca dei comandi. È un elenco di directory
separate da due punti, nelle quali la shell cerca i comandi (si veda
ESECUZIONE DEI COMANDI più avanti). Un nome di
directory di lunghezza zero (nulla) nel valore di
PATH indica la directory corrente. Un nome di
directory nullo può apparire come una serie di due punti
adiacenti, o come due punti all'inizio o alla fine. Il percorso
predefinito è dipendente dal sistema ed è impostato
dall'amministratore che installa bash. Un valore frequente è
``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
- POSIXLY_CORRECT
- Se questa variabile è presente nell'ambiente quando viene avviata
bash, la shell entra in modalità posix prima di
leggere i file di avvio, come se l'opzione di invocazione --posix
fosse stata specificata. Se è impostata mentre la shell è in
esecuzione, bash abilita la modalità posix, come se
il comando set -o posix fosse stato eseguito. Quando la shell entra
in modalità posix, imposta questa variabile se non fosse
già impostata.
- PROMPT_COMMAND
- Se questa variabile è impostata ed è un vettore, il valore
di ogni elemento impostato viene eseguito come comando prima di stampare
un prompt principale. Se è impostata, ma non è un vettore,
il suo valore è usato come comando da eseguire.
- PROMPT_DIRTRIM
- Se impostata a un numero maggiore di zero, il valore è usato come
il numero di componenti della directory finale da conservare quando si
espandono i caratteri protetti della stringa di prompt \w e
\W (si veda PROMPTING più avanti). I caratteri
rimossi sono sostituiti da puntini di sospensiones.
- PS0
- Il valore di questo parametro è espanso (si veda STRINGHE
DI PROMPT più avanti) e visualizzato dalle shell interattive
dopo aver letto un comando e prima che il comando venga
eseguito.
- PS1
- Il valore di questo parametro è espanso (si veda STRINGHE
DI PROMPT più avanti) e usato come stringa del prompt primario.
Il valore predefinito è
“\s-\v\$”.
- PS2
- Il valore di questo parametro è espanso allo stesso modo di
PS1 ed è usato come stringa di prompt
secondario. Il valore predefinito è “>
”.
- PS3
- Il valore di questo parametro è usato come prompt per il comando
select (si veda GRAMMATICA DELLA SHELL
sopra).
- PS4
- Il valore di questo parametro è espanso allo stesso modo di
PS1 ed il valore è stampato prima di ogni
comando che bash mostra durante un trace di esecuzione. Il primo
carattere del valore espanso di PS4 è
replicato tante volte, quanto necessario, per indicare livelli multipli di
indirezione. Il valore predefinito è “+”.
- SHELL
- Questa variabile si espande al percorso completo della shell. Se non
è impostata quando la shell viene avviata, bash le assegna
il percorso completo della shell di login dell'utente corrente.
- TIMEFORMAT
- Il valore di questo parametro è usato come stringa di formato per
specificare come dovrà essere mostrata l'informazione su data e ora
per pipeline aventi come prefisso la parola riservata time. Il
carattere % introduce una sequenza di formattazione che è
espansa a un valore di data e ora o ad altre informazioni. Le sequenze di
formattazione e il loro significato sono i seguenti; le parentesi quadre
denotano parti opzionali.
- %%
- Una % letterale.
- %[p][l]R
- Il tempo trascorso in secondi.
- %[p][l]U
- Il numero di secondi di utilizzo della CPU in modalità utente.
- %[p][l]S
- Il numero di secondi di utilizzo della CPU in modalità
sistema.
- %P
- La percentuale di utilizzo della CPU, calcolata come (%U + %S) / %R.
- La parte opzionale p è una cifra che specifica la
precisione, il numero di cifre frazionali dopo il separatore
decimale. Un valore pari a 0 fa sì che nessun separatore decimale o
frazione venga inserito nell'output. Possono essere specificate al massimo
tre posizioni dopo il separatore decimale; valori di p maggiori di
3 sono cambiati in 3. Se p non è specificato è
utilizzato il valore 3.
- La parte opzionale l specifica un formato più lungo, inclusi
i minuti, nella forma MMmSS.FFs. Il valore di
p determina se la frazione è inclusa o meno.
- Se questa variabile non è impostata, bash agisce come se
avesse il valore $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. Se il
valore è nullo, non viene mostrata alcuna informazione di tempo.
Una newline finale è aggiunta quando la stringa di formato è
visualizzata.
- TMOUT
- Se impostata a un valore maggiore di zero, TMOUT è
trattata come il tempo limite (timeout) predefinito per il comando
incorporato read. Il comando select viene terminato se non
riceve input dopo TMOUT secondi quando l'input
proviene da un terminale. In una shell interattiva il valore è
interpretato come il numero di secondi di attesa per l'input dopo
l'emissione del prompt primario. Bash termina dopo aver aspettato
per quel numero di secondi se non arriva una riga completa di input.
- TMPDIR
- Se impostata, bash usa il suo valore come nome della directory
nella quale bash crea file temporanei a uso della shell.
- auto_resume
- Questa variabile controlla il modo con cui la shell interagisce con
l'utente e con il job-control. Se questa variabile è impostata, dei
comandi semplici composti da una sola parola senza ridirezioni sono
considerati come candidati per la ripresa di un job in esecuzione che sia
stato sospeso. Non è possibile alcuna ambiguità; se vi
è più di un job che comincia con la stringa digitata,
è scelto il job su cui si è effettuato l'accesso più
recentemente. Il nome di un job sospeso, in questo contesto,
è la riga di comando usata per avviarlo. Se impostata al valore
exact, la stringa fornita deve essere esattamente uguale al nome di
un job fermo; se impostata a substring, la stringa fornita deve
combaciare con una sottostringa del nome di un job sospeso. Il valore
substring fornisce funzionalità analoghe all'identificatore
del job %? (si veda JOB CONTROL più
avanti). Se impostata a qualsiasi altro valore, la stringa fornita deve
essere un prefisso del nome di un job sospeso; questo consente
funzionalità analoghe all'identificatore di job
%string.
- histchars
- Sono i due o tre caratteri che controllano l'espansione della cronologia e
la suddivisione in token (si veda ESPANSIONE DELLA
CRONOLOGIA più avanti). Il primo carattere è il
carattere di espansione della cronologia, il carattere che segnala
l'inizio di una espansione della cronologia, normalmente `!'. Il
secondo carattere è il carattere di sostituzione rapida, che
è usato come scorciatoia per rieseguire il comando precedentemente
inserito, sostituendo una stringa con un'altra nel comando. Il valore
predefinito è `^'. Il terzo carattere, opzionale, è
il carattere che indica che il resto della riga è un commento,
quando è trovato come primo carattere di una parola, normalmente
`#'. Il carattere di commento della cronologia fa sì che la
sostituzione della cronologia venga saltata per le rimanenti parole sulla
riga. Esso non fa necessariamente sì che l'analizzatore della shell
tratti il resto della riga come un commento.
Bash fornisce variabili vettore monodimensionali
indicizzate e associative. Ogni variabile può essere usata come un
vettore indicizzato; il comando incorporato declare dichiara
esplicitamente un vettore. Non c'è un limite massimo per la
dimensione di un vettore, né alcuna richiesta che gli elementi siano
indicizzati o assegnati in modo contiguo. I vettori indicizzati sono
referenziati usando numeri interi (incluse le espressioni aritmetiche) e
cominciano con l'indice zero. I vettori associativi sono referenziati
utilizzando stringhe arbitrarie. Salvo che sia diversamente indicato, gli
indici dei vettori indicizzati devono essere interi non negativi.
Un vettore indicizzato è creato automaticamente se
l'assegnamento ad una qualsiasi variabile usa la sintassi
nome[deponente]=valore. Il deponente (indice del
vettore) è trattato come un'espressione aritmetica che deve risultare
un numero. Per dichiarare esplicitamente un vettore indicizzato, usare
declare -a nome (si veda COMANDI INCORPORATI DELLA
SHELL più avanti). È anche accettato declare -a
nome[deponente]; il deponente viene
ignorato.
Vettori associativi sono creati usando declare -A
nome.
Per una variabile vettore possono essere specificati degli
attributi utilizzando i comandi incorporati declare e
readonly. Ogni attributo si applica a tutti gli elementi di un
vettore.
Agli elementi del vettore vengono assegnati valori usando
assegnamenti composti della forma nome=(valore1 ...
valoren), dove ogni valore può essere della
forma [deponente]=stringa. Le assegnazioni di vettori
indicizzati non richiedono nient'altro che stringa. Ogni valore nella
lista è espanso usando tutte le espansioni della shell descritte
più avanti in ESPANSIONE. Quando si fanno assegnamenti
a vettori indicizzati, se vengono fornite le parentesi opzionali e
il deponente, l'elemento viene assegnato a quell'indice; altrimenti l'indice
dell'elemento assegnato è l'ultimo indice già utilizzato
aumentato di uno. L'indicizzazione parte da zero.
Quando si assegna ad un vettore associativo, le parole di un
assegnamento composto possono essere comandi d'assegnamento, per i quali
l'indice è obbligatorio, o una lista di parole che è
interpretata come una sequenza alternata di chiavi e valori:
nome=( chiave1 valore1 chiave2 valore2 ...).
Queste sono trattate come nome=(
[chiave1]=valore1 [chiave2]=valore2 ...).
La prima parola della lista determina come le successive verranno
interpretate; tutti gli assegnamenti in una lista devono essere dello stesso
tipo. Quando si usano coppie chiave/valore le chiavi non possono essere
assenti o vuote; un valore finale mancante o vuoto è interpretato
come stringa vuota.
Questa sintassi è accettata anche dal comando incorporato
declare. Elementi singoli di un vettore possono essere assegnati con
la sintassi nome[deponente]=valore introdotta
più sopra. Quando si fanno assegnamenti a un vettore indicizzato, se
nome è indicizzato da un numero negativo, quel numero è
interpretato come relativo all' indice massimo di nome aumentato di
uno, perciò indici negativi si conteggiano dalla fine del vettore
all'indietro, e un indice -1 corrisponde all'ultimo elemento.
L'operatore += farà aggiungere ad una variabile vettore
quando utilizzato con la sintassi di un assegnamento composto; vedere
PARAMETRI più su.
Qualsiasi elemento di un vettore può essere referenziato
con ${nome[deponente]}. Le parentesi sono richieste per
evitare conflitti con l'espansione di percorso. Se deponente è
@ o *, la parola espande a tutti gli elementi di nome.
Questi deponenti differiscono solo quando la parola appare inclusa fra
doppie virgolette. Se la parola è quotata con doppie virgolette,
${nome[*]} espande a una singola parola col valore di ogni elemento
del vettore separato dal primo carattere della variabile speciale
IFS, e ${nome[@]} espande ogni elemento di
nome come una parola separata. Quando non ci sono elementi nel
vettore, ${nome[@]} è espanso alla stringa nulla. Se
l'espansione quotata con doppie virgolette si trova dentro una parola,
l'espansione del primo parametro è legato con la parte iniziale della
parola originale, e l'espansione dell'ultimo parametro è legato con
l'ultima parte della parola originale. Questo è analogo
all'espansione dei parametri speciali * e @ (si veda
Parametri speciali sopra). ${#nome[deponente]} espande
alla lunghezza di ${nome[deponente]}. Se deponente
è * o @, l'espansione è il numero di elementi
del vettore. Se il deponente usato per referenziare un elemento di un
vettore indicizzato risulta, dopo l'espansione, un numero minore di zero,
è interpretato come relativo all'indice massimo del vettore aumentato
di uno, perciò indici negativi si conteggiano dalla fine del vettore
all'indietro, e un indice -1 corrisponde all'ultimo elemento.
Referenziare una variabile vettore senza specificare un deponente
equivale a referenziare il vettore con un deponente pari a zero. Ogni
riferimento a una variabile usando un deponente valido è consentito,
e bash creerà un vettore se necessario.
Una variabile vettore è considerata impostata se ad un
deponente è stato assegnato un valore. La stringa nulla è un
valore valido.
È possibile ottenere sia le chiavi (indici) che i valori di
un vettore. ${!nome[@]} e
${!nome[*]} espandono agli indici assegnati nella
variabile vettore nome. Quando è fra doppie virgolette il
trattamento è simile all'espansione dei parametri speciali @ e
* posti tra doppie virgolette.
Il comando incorporato unset è usato per annullare i
vettori. unset nome[deponente] annulla l'elemento di
vettore all'indice deponente, sia per i vettori indicizzati sia per
quelli associativi. Deponenti negativi di vettori indicizzati vengono
interpretati come descritto in precedenza. Annullare l'ultimo elemento di un
vettore non annulla la variabile. unset nome, dove nome
è un vettore, rimuove l'intero vettore. unset
nome[deponente] dove deponente è * o @,
si comporta diversamente a seconda che nome sia un vettore
indicizzato o associativo. Se nome è un vettore associativo
questo rimuove l'elemento con deponente * o @. Se nome
è un vettore indicizzato, rimuove tutti gli elementi, ma non il
vettore stesso.
Quando si usa un nome di variabile con un deponente come argomento
di un comando, come ad esempio unset, senza utilizzare la sintassi
per l'espansione della parola descritta sopra, l'argomento è soggetto
all'espansione del percorso. Se l'espansione del percorso non è
desiderabile, l'argomento va quotato.
Ciascuno dei comandi incorporati declare, local e
readonly accetta un'opzione -a per specificare un vettore
indicizzato e un'opzione -A per specificare un vettore associativo.
Se vengono fornite entrambe le opzioni, -A ha la precedenza. Il
comando incorporato read accetta un'opzione -a per assegnare a
un vettore una lista di parole lette dallo standard input. I comandi
incorporati set e declare mostrano i valori di vettore in modo
da essere riutilizzabili come assegnamenti.
L'espansione è eseguita sulla riga di comando dopo che essa
è stata divisa in parole. Vi sono sette tipi di espansione
effettuati: espansione delle parentesi graffe, espansione della
tilde, espansione di parametro e variabile, sostituzione di
comando, espansione aritmetica, suddivisione in parole e
espansione di percorso.
L'ordine di espansione è: espansione delle parentesi
graffe, espansione della tilde, espansione di parametro e di variabile,
espansione aritmetica, e sostituzione di comando (fatta da sinistra a
destra); suddivisione in parole; ed espansione di percorso.
Sui sistemi che la supportano, è disponibile un'espansione
aggiuntiva: la sostituzione di processo. Questa è effettuata
contemporaneamente come espansione della tilde, di parametro, di variabile e
aritmetica, e come sostituzione di comando.
Una volta effettuale queste espansioni, i caratteri di quotatura
presenti nella parola originale vengono rimossi, a meno che siano essi
stessi quotati (rimozione dei segni di quotatura)
Solo l'espansione delle parentesi graffe, la suddivisione in
parole e l'espansione di percorso possono cambiare il numero di parole
dell'espansione; le altre espansioni espandono una singola parola in una
singola parola. La sola eccezione a questo sono le espansioni di
“$@” e "${nome[@]}", e
in molti casi $* and ${name[*]} come spiegato
sopra (si vedi PARAMETRI).
Espansione delle parentesi graffe è un meccanismo
con il quale possono essere generate stringhe arbitrarie. Questo meccanismo
è simile all'espansione di percorso, ma non è
necessario che i file il cui nome è generato esistano. I modelli cui
si applica l'espansione delle parentesi graffe hanno la forma di un
preambolo opzionale, seguito da una serie di stringhe separate da
virgola o una espressione di sequenza racchiusa fra parentesi graffe,
seguite da un'appendice opzionale. Il preambolo è preposto a
ogni stringa contenuta dentro le parentesi graffe e l'appendice è poi
appesa a ogni stringa risultante, espandendo da sinistra a destra.
Le espansioni delle parentesi graffe possono essere nidificate. Il
risultato di ogni stringa espansa non viene ordinato; è conservato
l'ordine da sinistra a destra. Per esempio, a{d,c,b}e si
espande in `ade ace abe'.
Un'espressione di sequenza prende la forma
{x..y[..incr]}, dove
x e y sono o numeri interi o caratteri singoli e incr,
un incremento opzionale, è un numero intero. Se si specificano numeri
interi, l'espressione espande a ogni numero fra x e y,
inclusi. Ai numeri interi specificati può essere aggiunto uno
0 iniziale per costringere ogni termine ad avere la stessa ampiezza.
Quando x o y iniziano con uno zero, la shell tenta di forzare
tutti i termini generati a contenere lo stesso numero di cifre, aggiungendo
degli zeri ove necessario. Se si specificano caratteri, l'espressione
espande a ogni carattere lessicograficamente compreso fra x e
y inclusi, usando il locale C predefinito. Da notare che entrambi
x e y devono essere dello stesso tipo. Quando fornito,
l'incremento è usato come differenza tra ogni termine. L'incremento
predefinito è 1 o -1 a seconda del caso.
L'espansione delle parentesi graffe è effettuata prima di
qualsiasi altra espansione, e qualunque carattere speciale per uso delle
altre espansioni viene lasciato com'era nel risultato. Essa è
strettamente testuale. Bash non applica alcuna interpretazione
sintattica al contesto dell'espansione o al testo tra parentesi graffe.
Un'espansione delle parentesi graffe correttamente formata deve
contenere una parentesi graffa di apertura e una di chiusura non quotate, e
almeno una virgola non quotata. Qualunque espansione delle parentesi graffe
erroneamente formata è lasciata inalterata. Una { o ,
può essere quotata con una barra inversa per evitare che venga
considerata parte di un'espressione fra parentesi graffe. Per evitare
conflitti con l'espansione di parametro, la stringa ${ non dà
luogo all'espansione delle parentesi graffe, e inibisce l'espansione delle
parentesi graffe fino alla } di chiusura.
Questo costrutto è tipicamente usato come abbreviazione
quando il prefisso comune delle stringhe da generare è più
lungo che negli esempi sopra:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
o
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
L'espansione delle parentesi graffe introduce una lieve
incompatibilità con le versioni tradizionali di sh. sh
non tratta le parentesi graffe aperte e chiuse, specialmente quando esse
appaiono come parte di una parola, e le conserva in uscita. Bash
rimuove le parentesi graffe dalle parole come conseguenza dell'espansione
delle parentesi graffe. Per esempio, una parola data a sh come
file{1,2} appare identica nell'output. La stessa parola è data
in output come file1 file2 dopo l'espansione operata da bash.
Se si desidera una stretta compatibilità con sh si avvia
bash con l'opzione +B o si disabilita l'espansione delle
parentesi graffe con l'opzione +B al comando set (si veda
COMANDI INCORPORATI DELLA SHELL più
avanti).
Se una parola comincia con un carattere tilde (`~') non
quotato, tutti i caratteri che precedono la prima barra [/] non quotata (o
tutti i caratteri, se non vi è alcuna barra) sono considerati un
prefisso tilde. Se nessuno dei caratteri nel prefisso tilde è
quotato, i caratteri nel prefisso tilde che segue la tilde sono trattati
come un possibile nome di login. Se questo nome di login è la
stringa nulla, la tilde è sostituita con il valore del parametro
HOME. Se HOME viene annullato, è
invece sostituita la home directory dell'utente che sta eseguendo la
shell. Altrimenti, il prefisso tilde è sostituito con la home
directory associata al nome di login specificato.
Se il prefisso tilde è un `~+' il valore della variabile di
shell PWD sostituisce il prefisso tilde. Se il prefisso tilde
è un `~-', il valore della variabile di shell
OLDPWD, se impostato, viene sostituito. Se il
carattere che segue la tilde nel prefisso tilde è un numero N,
con un prefisso opzionale `+' o `-', il prefisso tilde è sostituito
dal corrispondente elemento dallo stack di directory, come dovrebbe essere
mostrato dal comando incorporato dirs invocato col prefisso tilde
come argomento. Se il carattere che segue la tilde nel prefisso tilde
è un numero non preceduto da un segno `+' o `-', viene assunto
`+'.
Se il nome di login non è valido o l'espansione della tilde
non ha successo, la parola rimane invariata.
Ogni assegnamento di variabile è controllato per prefissi
tilde non quotati che seguono immediatamente un : o il primo
=. In questi casi viene effettuata l'espansione della tilde. Di
conseguenza, si possono usare nomi di file con delle tilde negli
assegnamenti a PATH, MAILPATH e
CDPATH, e la shell assegna il valore espanso.
Bash fa anche l'espansione della tilde per le parole che
soddisfano le condizioni degli assegnamenti di variabile (come descritto
prima su PARAMETRI) quando questi appaiono come argomenti a
comandi semplici. Bash non lo fa, eccetto nei comandi
dichiarazione elencati sopra, quando in modalità
posix.
Il carattere `$' introduce l'espansione di parametro, la
sostituzione di comando, o l'espansione aritmetica. Il nome o simbolo del
parametro che dev'essere espanso può essere racchiuso tra parentesi
graffe, che sono opzionali ma servono a proteggere la variabile che deve
essere espansa dai caratteri immediatamente seguenti, che potrebbero essere
interpretati come parte del nome della variabile stessa.
Quando vengono usate le parentesi graffe, la parentesi graffa
finale corrispondente è la prima `}' non protetta da una barra
inversa o da stringhe con quotatura, e non parte di un'espansione aritmetica
inclusa, di una sostituzione di comando o di un'espansione di parametro.
- ${parametro}
- Il valore di parametro è sostituito. Le parentesi graffe
sono richieste quando parametro è un parametro posizionale
con più di una cifra, o quando parametro è seguito da
un carattere che non deve essere interpretato come parte del suo nome. Il
parametro è un parametro di shell come descritto sopra
(PARAMETRI) o un riferimento a un vettore (Vettori).
Se il primo carattere di parametro è un punto
esclamativo (!), e parametro non è un nameref,
introduce un livello di indirezione. Bash usa il valore formato
espandendo il resto di parametro come il nuovo parametro;
questo è poi espanso e quel valore è usato nel resto
dell'espansione, piuttosto che l'espansione del parametro originario.
Questa è conosciuta come espansione indiretta. Il valore
è soggetto all'espansione della tilde, espansione di parametro,
sostituzione di comando, ed espansione aritmetica. Se parametro
è un nameref, questo espande al nome del parametro referenziato da
parametro invece di effettuare l'espansione indiretta completa. Le
eccezioni a ciò sono le espansioni di
${!prefisso*} e ${!nome[@]}
descritte più avanti. Il punto esclamativo deve seguire
immediatamente la parentesi graffa iniziale per introdurre
l'indirezione.
In ognuno dei casi sotto riportati, parola è
soggetta a espansione della tilde, espansione di parametro, sostituzione di
comando ed espansione aritmetica.
Quando non sta effettuando l'espansione della sottostringa, usando
le forme documentate più avanti (p.es., :-), Bash
controlla se un parametro non è impostato o è nullo.
L'omissione dei due punti provoca il solo controllo di un parametro non
impostato.
- ${parametro:-parola}
- Usa i valori predefiniti. Se parametro non è
impostato o è nullo, è sostituita l'espansione di
parola. Altrimenti, il valore di parametro è
sostituito.
- ${parametro:=parola}
- Assegna i valori predefiniti. Se parametro non è
impostato o è nullo, l'espansione di parola è
assegnata a parametro. Il valore di parametro è
quindi sostituito. I parametri posizionali e i parametri speciali non
possono essere assegnati in questo modo.
- ${parametro:?parola}
- Dà una segnalazione di errore se è nullo o è stato
annullato. Se parametro è nullo o è stato
annullato, l'espansione di parola (o un messaggio di segnalazione,
se parola non è presente) viene scritta sullo standard error
e la shell, se non è interattiva, termina. Altrimenti, è
sostituito il valore di parametro.
- ${parametro:+parola}
- Se parametro è nullo o è stato annullato, non
è sostituito niente, altrimenti è sostituita l'espansione di
parola.
- ${parametro:scostamento}
- ${parametro:scostamento:lunghezza}
- Espansione di sottostringa. Espande i caratteri del valore di
parametro fino a lunghezza partendo dal carattere
specificato da scostamento. Se parametro è @ o
*, un vettore indicizzato con deponente @ o *, o un
nome di un vettore associativo, il risultato differisce come descritto
più avanti. Se lunghezza viene omesso, espande alla
sottostringa del valore di parametro partendo dal carattere
specificato da scostamento fino alla fine del valore.
lunghezza e scostamento sono espressioni aritmetiche (si
veda VALUTAZIONE ARITMETICA più avanti).
Se scostamento è un numero minore di zero, il
valore viene usato come scostamento nei caratteri dalla fine del valore
di parametro. Se lunghezza è un numero minore di
zero, viene interpretato come uno scostamento in caratteri dalla finedel
valore di parametro piuttosto che come un numero di caratteri, e
l'espansione è rappresentata dai caratteri fra lo
scostamento e quel risultato. Si noti che uno scostamento
negativo dev'essere separato dai due punti da almeno uno spazio per
evitare che venga confuso con l'espansione di :-.
Se parametro è @ o *, il risultato
è un numero di parametri posizionali pari a lunghezza a
partire da scostamento. Uno scostamento negativo è
interpretato come relativo al parametro posizionale più grande
aumentato di uno, cosicché uno scostamento di -1 corrisponde
all'ultimo parametro posizionale. È un errore di espansione se
lunghezza risulta un numero minore di zero.
Se parametro è un nome di vettore indicizzato
con deponente @ o *, il risultato è un numero di elementi del
vettore pari a lunghezza a partire da
${parametro[scostamento]}. Uno scostamento negativo
è inteso come relativo al massimo indice del vettore specificato
aumentato di uno. È un errore di espansione se lunghezza
è un numero minore di zero.
L'espansione di sottostringa applicata a un vettore
associativo produce risultati indefiniti.
L'indicizzazione della sottostringa è a base zero a
meno che non vengano usati i parametri posizionali, nel qual caso
l'indicizzazione parte da 1 come impostazione predefinita. Se
scostamento è 0, e vengono usati i parametri posizionali,
alla lista è aggiunto il prefisso $0.
- ${!prefisso*}
- ${!prefisso@}
- Nomi corrispondenti al prefisso. Espande ai nomi delle variabili i
cui nomi iniziano con prefisso, separati dal primo carattere della
variabile speciale IFS. Quando viene usato @ e
l'espansione appare tra doppie virgolette, ogni nome di variabile
si espande in una parola separata.
- ${!nome[@]}
- ${!nome[*]}
- Lista delle chiavi di vettore. Se nome è una
variabile vettore, espande alla lista degli indici di vettore (chiavi)
assegnati in nome. Se nome non è un vettore, espande
a 0 se nome è impostato ed è nullo in caso contrario.
Quando @ è usato e l'espansione appare fra doppie
virgolette, ogni chiave espande a una parola separata.
- ${#parametro}
- lunghezza parametro} È sostituita la lunghezza in caratteri
del valore di parametro. Se parametro è * o
@, il valore sostituito è il numero di parametri
posizionali. Se parametro è un nome di vettore
contrassegnato da * o @ il valore sostituito è il
numero di elementi nel vettore. Se parametro è un nome di
vettore indicizzato con deponente negativo, quel numero è
interpretato come relativo al massimo indice di parametro aumentato
di uno, perciò indici negativi si conteggiano dalla fine del
vettore all'indietro, e un indice -1 corrisponde all'ultimo elemento.
- ${parametro#parola}
- ${parametro##parola}
- Rimozione del suffisso corrispondente al modello. La parola
è espansa per produrre un modello proprio come nell'espansione di
percorso, e confrontata col valore espanso di parametro usando le
regole descritte più avanti in Modelli di ricerca. Se il
modello corrisponde a una parte finale del valore espanso di
parametro, il risultato dell'espansione è il valore espanso
di parametro con il più corto dei modelli corrispondenti
cancellato (nel caso di “#” ) o il più lungo
dei modelli corrispondenti cancellato (nel caso di
“##”). Se parametro è @ o
*, l'operazione di rimozione del modello è applicata a
ognuno dei parametri posizionali, e l'espansione è la lista
risultante. Se parametro è una variabile vettore con
deponente @ o *, l'operazione di rimozione del modello
è applicata a ognuno degli elementi del vettore, e l'espansione
è la lista risultante.
- ${parametro%parola}
- ${parametro%%parola}
- Rimozione del suffisso corrispondente al modello. La parola
è espansa per produrre un modello proprio come nell'espansione di
percorso, e confrontata col valore espanso di parametro usando le
regole descritte più avanti in Modelli di ricerca. Se il
modello corrisponde a una parte finale del valore espanso di
parametro, il risultato dell'espansione è il valore espanso
di parametro con il più corto dei modelli corrispondenti
cancellato (nel caso di “%” ) o il più lungo
dei modelli corrispondenti cancellato (nel caso di
“%%”). Se parametro è @ o
*, l'operazione di rimozione del modello è applicata a
ognuno dei parametri posizionali, e l'espansione è la lista
risultante. Se parametro è una variabile vettore con
deponente @ o *, l'operazione di rimozione del modello
è applicata a ognuno degli elementi del vettore, e l'espansione
è la lista risultante.
- ${parameter/modello/stringa}
- ${parametro//modello/stringa}
- ${parametro/#modello/stringa}
- ${parametro/%modello/stringa}
- Sostituzione di modello. Il modello è espanso per
produrre un modello proprio come nell'espansione di percorso.
Parametro è espanso e il suo valore più lungo che
corrisponde a modello è sostituito con stringa.
stringa viene sottoposta all'espansione della tilde, espansione di
parametro e di variabile, espansione aritmetica, sostituzione di comando e
processo e rimozione di quotatura. Il confronto è effettuato usando
le regole descritte più avanti in Modelli di ricerca. Nella
prima forma sopraelencata viene sostituita solo la prima occorrenza. Se ci
sono due slash che separano parametro da modello (la seconda
forma), tutte le corrispondenze di modello vengono sostituite con
stringa. Se modello è preceduto da # (la terza
forma) la corrispondenza deve avvenire all'inizio del valore espanso di
parametro. Se modello è preceduto da % (la
quarta forma) la corrispondenza deve avvenire alla fine del valore espanso
di parametro. Se l'espansione di stringa è nulla, le
corrispondenza di modello vengono cancellate. Se stringa
è nulla allora le corrispondenze di modello vengono
cancellate e la / che segue modello può essere
omessa.
Se l'opzione di shell patsub_replacement è
abilitata usando shopt, ogni istanza di & senza
quotatura in stringa viene sostituita dalla porzione
corrispondente di modello.
Una qualsiasi parte di stringa senza quotatura inibisce
la sostituzione nell'espansione della parte con quotatura, comprese le
stringhe di sostituzione memorizzate in variabili shell. La barra
inversa farà perdere il valore speciale a & in
stringa; la barra inversa è rimossa in modo da permettere
un carattere letterale & nella stringa di sostituzione. La
barra inversa viene usata anche per togliere il significato a se stesso;
\\ risulta una semplice barra inversa nella stringa di
sostituzione. Gli utenti devo fare attenzione se la stringa è tra
doppi apici per evitare interazioni non richieste tra la barra inversa e
le doppie virgolette, poiché la barra inversa ha un significato
particolare all'interno delle doppie virgolette. La sostituzione di
modelli effettua un controllo su & non tra virgolette dopo
aver espanso stringa; i programmatore shell dovrebbero
virgolettare ogni occorrenza di & che vogliono sia presa
letteralmente nella parte di sostituzione, e dovrebbero assicurarsi che
ogni istanza di & che vogliono sia sostituita non sia
virgolettata.
Se l'opzione di shell nocasematch è abilitata,
la corrispondenza è effettuata senza distinguere maiuscole da
minuscole nei caratteri alfabetici. Se parametro è
@ o *, l'operazione è applicata a ognuno dei
parametri posizionali, e l'espansione è la lista risultante. Se
parametro è una variabile vettore con deponente @ o
*, l'operazione è applicata a ognuno degli elementi del
vettore, e l'espansione è la lista risultante.
- ${parametro^modello}
- ${parametro^^modello}
- ${parametro,modello}
- ${parametro,,modello}
- Modifica minuscolo/maiuscolo. Questa espansione modifica in
parametro i caratteri alfabetici da minuscolo a maiuscolo e
viceversa. Il modello viene espanso per produrre un modello,
proprio come nell'espansione del nome di percorso. Ciascun carattere nel
valore espanso di parametro viene confrontato con modello e,
se corrisponde al modello, le minuscole/maiuscole vengono convertite. Il
modello potrebbe non cercare corrispondenze con più di un
carattere. L'operatore ^ converte le lettere minuscole che
corrispondono a modello in lettere maiuscole; l'operatore ,
converte le lettere maiuscole trovate in lettere minuscole. Le espansioni
^^ e ,, convertono ogni carattere trovato nel valore
espanso; le espansioni ^ e , trovano e convertono solo il
primo carattere nel valore espanso. Se modello è omesso,
è trattato come un ?, che individua tutti i caratteri. Se
parametro è @ o *, l'operazione di conversione
minuscole/maiuscole è applicata a tutti i parametri posizionali
successivi, e l'espansione è la lista risultante. Se
parametro è una variabile vettore indicizzata con @ o
*, l'operazione di conversione minuscole/maiuscole è
applicata a tutti i successivi elementi del vettore, e l'espansione
è la lista risultante.
- ${parametro@operatore}
- Trasformazione di parametro. L'espansione è o una
trasformazione del valore di parametro o un'informazione su
parametro stesso, a seconda del valore di operatore. Ogni
operatore è una sola lettera:
- U
- L'espansione è una stringa che è il valore di
parametro coi caratteri alfabetici minuscoli convertiti in
maiuscolo.
- u
- L'espansione è una stringa che è il valore di
parametro con il primo carattere convertito in maiuscolo, se
è alfabetico.
- L
- L'espansione è una stringa che è il valore di
parametro coi caratteri alfabetici maiuscoli convertiti in
minuscolo.
- Q
- L'espansione è una stringa che è il valore di
parametro quotato in un formato riutilizzabile come input.
- E
- L'espansione è una stringa che è il valore di
parametro con sequenza di protezione con barra inversa espansa come
se fosse il meccanismo di quotatura $'...'.
- P
- L'espansione è una stringa che è il risultato
dell'espansione del valore di parametro come se fosse una stringa
di prompt (si veda più avanti STRINGHE D PROMPT).
- A
- L'espansione è una stringa nella forma di istruzione di
assegnamento o di comando declare che, se valutato, ricreerà
parametro coi suoi attributi e col suo valore.
- K
- Produce una versione eventualmente virgolettata del valore di
parametro, ma stampa o valori di un vettore associativo come
sequenza di coppie chiave/valore virgolettate (vedere Vettori
più su).
- a
- L'espansione è una stringa consistente di valori di flag che
rappresentano attributi di parametro.
- k
- Come la trasformazione K, ma espande chiavi e valori di vettori
indicizzati e associativi come parole distinte dopo la separazione delle
parole.
Se parametro è @ o *, l'operazione
è applicata a ognuno dei parametri posizionali, e l'espansione
è la lista risultante. Se parametro è una variabile
vettore con deponente @ o *, l'operazione è applicata a
ognuno degli elementi del vettore, e l'espansione è la lista
risultante.
Il risultato dell'espansione è soggetto alla suddivisione
in parole e all'espansione di percorso come descritto più
avanti..
La sostituzione di comando permette che l'output di un
comando rimpiazzi il nome del comando. Vi sono due forme:
o
`comando`
Bash effettua l'espansione eseguendo il comando in
un ambiente di subshell e rimpiazzando la sostituzione di comando con lo
standard output del comando, con ogni newline finale cancellato. I newline
intermedi non vengono cancellati, ma possono essere rimossi durante la
suddivisione in parole. La sostituzione di comando $(cat
file) può essere sostituita dall'equivalente ma
più veloce $(< file).
Quando è usata la forma di sostituzione in vecchio stile
con gli apici rovesciati, la barra inversa conserva il suo significato
letterale tranne quando è seguita da $, `, o \.
Il primo apice rovesciato non preceduto da una barra inversa fa terminare la
sostituzione di comando. Quando si usa la forma $(comando), tutti i
caratteri tra le parentesi formano il comando; nessuno è considerato
speciale.
La sostituzione di comando può essere nidificata. Per
nidificare quando si usa la forma con gli apici rovesciati, bisogna far
precedere gli apici rovesciati più interni con una barra inversa di
protezione.
Se la sostituzione appare tra virgolette, la suddivisione in
parole e l'espansione di percorso non sono effettuate sui risultati.
L'espansione aritmetica permette la valutazione di una espressione
aritmetica e la sostituzione del risultato. Il formato per l'espansione
aritmetica è:
Il vecchio comando $[expression] è
deprecato e verrà rimosso nelle prossime versioni di bash.
L'espressione è trattata come se fosse tra
virgolette, ma le virgolette in espressione non sono trattate in modo
speciale e sono rimosse. Tutti i token dell'espressione sono assoggettati a
espansione di parametro e di variabile, sostituzione di comando e rimozione
dei caratteri di quotatura. Il risultato è trattato come espressione
aritmetica da valutare. Le espansioni aritmetiche possono essere
nidificate.
Il calcolo è effettuato in accordo con le regole elencate
più avanti sotto VALUTAZIONE ARITMETICA. Se
espressione non è valida, bash stampa un
messaggio che indica l'errore e non viene effettuata alcuna
sostituzione.
La sostituzione di processo consente di far riferimento a
un input o a un output di processo usando un nome-file. Essa prende la forma
di <(lista) o >(lista). La
lista di processi è eseguita in modalità asincrona, e
il suo input o output appare come un nome-file. Il nome di questo file
è passato come argomento al comando corrente come risultato
dell'espansione. Se è usata la forma
>(lista), la scrittura sul file fornisce input per
la lista. Se è usata la forma
<(lista), il file passato come argomento dovrebbe
essere letto per ottenere l'output di lista. La sostituzione di
processo è supportata su sistemi che supportano le named pipe
(FIFO) o il metodo /dev/fd per denominare i file aperti.
Su sistemi che la supportano, la sostituzione di processo è
effettuata allo stesso momento dell'espansione di parametro e di variabile,
della sostituzione di comando e dell'espansione aritmetica.
La shell scandisce il risultato dell'espansione di parametro,
sostituzione di comando ed espansione aritmetica che non si trovano tra
virgolette, per eseguire la suddivisione in parole.
La shell tratta ogni carattere di IFS come un
delimitatore, e suddivide in parole i risultati delle altre
espansioni usando uno di questi caratteri come delimitatori di campo. Se il
valore di IFS non è impostato o il suo valore
è esattamente <space><tab><newline>, il
valore predefinito, sequenze di <space>, <tab> e
<newline> all'inizio e alla fine dei risultati delle precedenti
espansioni vengono ignorate, e qualsiasi sequenza di caratteri
IFS, che non siano all'inizio o alla fine, servono per
delimitare le parole. Se IFS ha un valore diverso da
quello predefinito, allora sequenze di caratteri di spaziatura space
e tab e newline sono ignorate all'inizio e alla fine della
parola, se il carattere di spaziatura è presente nel valore di
IFS (un carattere di spaziatura IFS).
Qualunque carattere in IFS che non è un
carattere di spaziatura IFS, insieme con qualsiasi
carattere di spaziatura IFS adiacente,
delimita un campo. Una sequenza di caratteri di spaziatura IFS
è anche trattata come un delimitatore. Se il valore di
IFS è nullo, non avviene alcuna suddivisione in
parole.
Argomenti esplicitamente nulli ("" o '')
sono conservati e passati ai comandi come stringa vuota. Argomenti non
quotati implicitamente nulli, risultanti dall'espansione di parametri con
valore nullo, sono rimossi. Se un parametro con valore nullo è
espanso fra virgolette, è considerato un argomento nullo ed è
conservato e passato a un comando come stringa vuota. Quando un argomento
nullo quotato appare come parte di una parola la cui espansione è
non-nulla, l'argomento nullo viene rimosso. Cioè, la parola
-d'' diventa -d dopo la
suddivisione della parola e la rimozione dell'argomento nullo.
È da notare che se non avviene alcuna espansione non viene
effettuata alcuna suddivisione.
Dopo la suddivisione in parole, a meno che non sia stata impostata
l'opzione -f, bash scandisce ogni parola alla ricerca di
caratteri *, ? e [. Se uno di questi caratteri è
presente e non è tra virgolette, allora la parola è
considerata come un modello, e sostituita con una lista, in ordine
alfabetico, di nomi-file che corrispondono al modello (vedere
Pattern Matching più oltre). Se nessun nome-file
corrispondente viene trovato, e l'opzione di shell nullglob
non è abilitata, la parola è lasciata inalterata. Se l'opzione
nullglob è impostata, e nessuna corrispondenza è
trovata, la parola è rimossa. Se l'opzione di shell failglob
è impostata, e non viene trovata alcuna corrispondenza, viene
stampato un messaggio di errore e il comando non viene eseguito. Se
l'opzione di shell nocaseglob è abilitata, il confronto
è effettuato senza distinzione fra maiuscole e minuscole nei
caratteri alfabetici. Notare che quando si usano espressioni di intervalli
come in [a-z] (vedere più avanti), le lettere maiuscole e minuscole
possono essere incluse, a seconda dalle impostazioni di LC_COLLATE.
Quando un modello è usato per l'espansione di percorso, il carattere
“.” all'inizio di un nome o immediatamente dopo una
barra [/] deve essere confrontato esplicitamente, a meno che l'opzione di
shell globdot non sia impostata. Per fare corrispondere i nomi-file
“.” e “..” il modello deve
iniziare con “.” (ad esempio, “.?”), anche se
dotglob è impostata. Se l'opzione di shell globskipdots
è abilitata, i nomi-file “.” e
“..” non corrispondono mai, neppure se il modello
inizia con “.”. Quando non si confrontano nomi-file, il
carattere “.” non è trattato in maniera
speciale. Quando si confronta un percorso, il carattere barra [/] deve
sempre essere confrontato esplicitamente. Negli altri casi, il carattere
“.” non è trattato in modo speciale. Vedere la
descrizione di shopt più avanti sotto COMANDI
INCORPORATI DELLA SHELL per una descrizione delle opzioni di
shell nocaseglob, nullglob, globskipdots,
failglob e dotglob.
La variabile di shell GLOBIGNORE può essere
usata per restringere la serie di nomi di file che corrispondono a
un modello. Se GLOBIGNORE è impostato, ogni nome
di file da confrontare che corrisponde anche a uno dei modelli in
GLOBIGNORE è rimosso dalla lista dei nomi che
corrispondono al modello. Se è impostata l'opzione nocaseglob
, il confronto coi modelli in GLOBIGNORE è effettuata
senza distinzione tra minuscole e maiuscole. I nomi-file
“.” e “..” sono sempre ignorati
quando GLOBIGNORE è impostato e non nullo.
Comunque, impostare GLOBIGNORE a un valore non nullo
ha l'effetto di abilitare l'opzione di shell dotglob,
così da cercare una corrispondenza con tutti gli altri nomi-file che
iniziano con un “.”. Per ottenere il comportamento
(usato in precedenti versioni) di ignorare i nomi-file che iniziano con
“.”, si deve fare un modello “.*”
in GLOBIGNORE. L'opzione dotglob è
disabilitata quando GLOBIGNORE viene annullato. Il
modello di ricerca rispetta l'impostazione dell'opzione di shell
extglob.
Modelli di ricerca / espressioni regolari
Ogni carattere che appare in un modello (espressione regolare),
tranne quelli speciali descritti qui sotto, corrisponde a se stesso. Il
carattere NULL non può far parte di un'espressione regolare. Una
barra inversa segnala come speciale il carattere che segue; la barra inversa
è ignorata durante il confronto. I caratteri speciali del modello
devono essere racchiusi tra apici se si vuole che siano considerati
così come sono scritti.
I caratteri speciali nelle espressioni regolari hanno i seguenti
significati:
- *
- Corrisponde a qualsiasi stringa, inclusa la stringa nulla. Quando è
abilitata l'opzione di shell globstar, e in un contesto di
espansione del nome di percorso viene usato *, due *
adiacenti usati come unico criterio di ricerca troveranno tutti i file e
zero o più directory e sottodirectory. Se seguito da un /,
due * adiacenti troveranno solo directory e sottodirectory.
- ?
- Corrisponde a qualsiasi carattere singolo.
- [...]
- Corrisponde a uno qualsiasi dei caratteri racchiusi fra parentesi quadre.
Una coppia di caratteri separati da un segno meno denota un'espressione
di intervallo, che individua ogni carattere che si trova tra quei due
caratteri, essi stessi inclusi, usando la sequenza di ordinamento della
localizzazione corrente. Se il primo carattere che segue il [
è un ! o un ^ allora qualsiasi carattere non
specificato è ritenuto corrispondente. L'ordine di ordinamento dei
caratteri nell'espressione di intervallo è determinato dalla
localizzazione corrente e dai valori delle variabili di shell
LC_COLLATE o LC_ALL , se
impostate. Per ottenere l'interpretazione tradizionale delle espressioni
d'intervallo, dove [a-d] è equivalente a [abcd],
impostare il valore della variabile di shell LC_ALL a C, o
abilitare l'opzione di shell globasciiranges. Un -
può essere specificato includendolo come primo o ultimo carattere
nella lista. Una ] può essere specificata includendola come
primo carattere nell'insieme.
All'interno di [ e ], possono essere specificate
classi di caratteri usando la sintassi
[:classe:], dove classe è una delle
seguenti classi definite nello standard POSIX:
alnum alpha ascii blank cntrl digit graph lower print
punct space upper word xdigit
Una classe di caratteri trova una corrispondenza con qualsiasi carattere
appartenente a quella classe. La classe di caratteri
word individua
lettere, cifre e il carattere _.
All'interno di [ e ] può essere specificata
una classe di equivalenza con la sintassi [=c=],
che individua tutti i caratteri con lo stesso grado di ordinamento (come
definito dalla localizzazione corrente) del carattere c.
All'interno di [ e ] la sintassi
[.symbol.] individua il simbolo di ordinamento
symbol.
Se l'opzione di shell extglob è abilitata col
comando incorporato shopt, vengono riconosciuti diversi operatori
estesi per la descrizione di modelli. Nella descrizione seguente, un
elenco-modelli è una lista di uno o più modelli
separati da una |. Possono essere formati modelli composti usando uno
o più dei seguenti sotto-modelli:
- ?(elenco-modelli)
- Individua zero o una occorrenza dei modelli specificati
- *(elenco-modelli)
- Individua zero o più occorrenze dei modelli specificati
- +(elenco-modelli)
- Individua una o più occorrenze dei modelli specificati
- @(elenco-modelli)
- Individua uno dei modelli specificati
- !(elenco-modelli)
- Individua qualsiasi cosa eccetto uno dei modelli specificati
L'opzione extglob cambia il comportamento del parser
poiché le parentesi vengono trattate normalmente come operatori con
significato sintattico. Per accertarsi che i modelli per le corrispondenze
estese siano correttamente definiti, assicurarsi che extglob sia
abilitata prima di effettuare il parse del costrutto che contiene i modelli,
ivi incluse le funzioni shell e le sostituzioni di comando.
Durante la corrispondenza con nomi-file, l'opzione di shell
dotglob determina l'insieme dei nomi-file che sono controllati:
quando dotglob è abilitata, l'insieme dei nomi-file include
quelli che iniziano con “.”, ma“.” e
“..” devono essere selezionati tramite un modello o
sottomodello che inizi per punto; quando è disabilitata
La corrispondenza con modelli estesi complessi su stringhe lunghe
è lenta, specialmente quando il modello contiene alternative e le
stringhe contengono più corrispondenze. Usare corrispondenze separate
su stringhe più corte, o usare vettori di stringhe anziché una
unica stringa lunga, può essere più veloce.
Dopo le precedenti espansioni, tutte le occorrenze non
virgolettate dei caratteri \, ' e " non originate
da una delle espansioni di cui sopra sono rimosse.
Prima che un comando sia eseguito, i suoi input e output possono
essere ridiretti usando una speciale notazione interpretata dalla
shell. La ridirezione permette ai puntatori (handle) ai file del comando di
essere duplicati, aperti, chiusi, fatti per riferire file differenti, e
può cambiare i file da cui il comando legge o su cui scrive. La
ridirezione può anche essere usata per modificare i puntatori ai file
nell'ambiente di esecuzione della shell corrente. I seguenti operatori di
ridirezione possono precedere o apparire in qualsiasi posizione all'interno
di un comando semplice o possono venire dopo un comando. Le
ridirezioni sono elaborate nell'ordine in cui compaiono, da sinistra a
destra.
Ogni ridirezione che può essere preceduta da un numero di
descrittore di file può invece essere preceduta da una parola della
forma {nomevar}. In questo caso, per ogni operatore di ridirezione ad
eccezione di >&- e <&-, la shell allocherà un
descrittore di file maggiore o uguale a 10 e lo assegnerà a
nomevar. Se >&- o <&- è preceduto da
{nomevar}, il valore di nomevar definisce il descrittore di
file da chiudere. Se viene fornito {nomevar}, la ridirezione persiste
oltre l'ambito del comando, consentendo al programmatore di shell di gestire
da sé il descrittore di file. L'opzione di shell
varredir_close gestisce questo comportamento.
Nelle seguenti descrizioni, se il numero di descrittore di file
è omesso, e il primo carattere dell'operatore di ridirezione è
<, la ridirezione si riferisce allo standard input (descrittore di
file 0). Se il primo carattere dell'operatore di ridirezione è
>, la ridirezione si riferisce allo standard output (descrittore
di file 1).
La parola che segue l'operatore di ridirezione nelle seguenti
descrizioni, se non diversamente specificato, è sottoposta a
espansione delle parentesi graffe, espansione della tilde, espansione di
parametro e di variabile, sostituzione di comando, espansione aritmetica,
rimozione dei caratteri di quotatura, espansione dei percorsi e suddivisione
in parole. Se si espande a più di una parola bash dà
una segnalazione di errore.
È da notare che l'ordine delle ridirezioni è
significativo. Per esempio, il comando
dirige sia lo standard output che lo standard error sul file
dirlist, mentre il comando
dirige solo lo standard output sul file dirlist,
poiché lo standard error è stato duplicato dallo standard
output prima che lo standard output fosse ridiretto su dirlist.
Bash manipola parecchi nomi-file specialmente quando sono
usati in ridirezioni, come descritto nella tavola seguente. Se il sistema
operativo nel quale Bash è in esecuzione fornisce questi file
speciali, bash userà quelli; altrimenti li emulerà
internamente col comportamento descritto più avanti.
- /dev/fd/fd
- Se fd è un intero valido, il descrittore di file fd
è duplicato.
- /dev/stdin
- Il descrittore di file 0 è duplicato.
- /dev/stdout
- Il descrittore di file 1 è duplicato.
- /dev/stderr
- Il descrittore di file 2 è duplicato.
- /dev/tcp/host/porta
- Se host è un nome di host valido o un indirizzo Internet, e
porta è un numero intero di porta o il nome di un servizio,
bash tenta di aprire il socket TCP corrispondente.
- /dev/udp/host/porta
- Se host è un nome di host valido o un indirizzo Internet, e
porta è un numero intero di porta o il nome di un servizio,
bash tenta di aprire il socket UDP corrispondente.
L'insuccesso nell'aprire o creare un file determina l'insuccesso
della ridirezione.
Ridirezioni con descrittori di file maggiori di 9 dovrebbero
essere usate con attenzione, poiché possono entrare in conflitto coi
descrittori di file usati internamente dalla shell.
Si noti che il comando incorporato e exec può fare
ridirezioni che hanno effetto nella shell corrente.
La ridirezione dell'input fa sì che il file il cui nome
risulta dall'espansione di parola venga aperto in lettura sul
descrittore di file n, o come standard input (descrittore di file 0)
se n non è specificato.
Il formato generico per ridirigere l'input è:
La ridirezione dell'output fa sì che il file il cui nome
risulta dall'espansione di parola venga aperto in scrittura sul
descrittore di file n, o come standard output (descrittore di file 1)
se n non è specificato. Se il file non esiste viene creato; se
esiste viene sovrascritto, come se fosse di dimensione zero.
Il formato generico per ridirigere l'output è:
Se l'operatore di ridirezione è >, e l'opzione
noclobber del comando incorporato set è stata
abilitata, la ridirezione non ha successo se il file il cui nome risulta
dall'espansione di parola esiste ed è un file regolare. Se
l'operatore di ridirezione è >|, o l'operatore di
ridirezione è > e l'opzione noclobber del comando
incorporato set non è abilitata, la ridirezione è
tentata anche se il file denominato da parola esiste.
La ridirezione dell'output in questo modalità fa sì
che il file il cui nome risulta dall'espansione di parola venga
aperto per accodare sul descrittore di file n, o sullo standard
output (descrittore di file 1) se n non è specificato. Se il
file non esiste viene creato.
Il formato generico per accodare l'output è:
Con questo costrutto, sia l'uscita dello standard output
(descrittore di file 1) che quella dello standard error (descrittore di file
2) sono ridirette sul file il cui nome risulta dall'espansione di
parola.
Vi sono due formati per ridirigere lo standard output e lo
standard error:
e
>&parola
Delle due forme, la prima è quella preferita. Questo
è semanticamente equivalente a
Usando la seconda forma, parola potrebbe non espandersi a
un numero o a -. Se capita, si applicano altri operatori di
ridirezione (vedi Duplicazione dei descrittori di file più
avanti) per ragioni di compatibilità.
Con questo costrutto, sia l'uscita dello standard output
(descrittore di file 1) che quella dello standard error (descrittore di file
2) viene accodata al file il cui nome è l'espansione di
parola.
Il formato per accodare lo standard output e lo standard error
è:
Questo è semanticamente equivalente a
(si veda Duplicazione dei descrittori di file più
avanti).
Questo tipo di ridirezione istruisce la shell a leggere l'input
dall'input corrente, finché non venga incontrata una riga contenente
solo delimitatore (senza alcun carattere blank dopo la parola
stessa). Tutte le righe lette fino a quel punto sono quindi usate come
standard input (o descrittore di file n se è specificato
n) per un comando.
Il formato degli here-document è il seguente:
[n]<<[-]word
here-document
delimitatore
Nessuna espansione di parametro e di variabile, sostituzione di
comando, espansione aritmetica o espansione di percorso è effettuata
su parola. Se una qualsiasi parte di parola è quotata,
il delimitatore è il risultato della rimozione dei caratteri
di quotatura da parola, e le righe nel here-document non vengono
espanse. Se parola non è quotata, tutte le righe del
here-document sono soggette a espansione di parametro, sostituzione di
comando ed espansione aritmetica, la sequenza \<newline>
è ignorata, e \ deve essere usata per quotare i caratteri
\, $ e `.
e l'operatore di ridirezione è <<-, tutti i
caratteri di tabulazione a inizio riga sono eliminati dalle righe in input e
dalla riga che contiene delimitatore. Questo permette che un
here-document dentro uno script di shell possa essere indentato in maniera
naturale.
Una variante degli here document, il formato è:
La parola è sottoposta a espansione della tilde,
espansione di parametro e di variabile, sostituzione di comando, espansione
aritmetica e rimozione dei caratteri di quotatura. L'espansione di percorso
e la suddivisione in parole non vengono effettuate. Il risultato è
dato come una stringa singola, con un newline finale, al comando sul suo
standard input (o sul descrittore di file n se viene specificato
n.
L'operatore di ridirezione
è usato per duplicare descrittori di file di input. Se
parola si espande in una o più cifre, il descrittore di file
indicato da n è fatto diventare una copia di quel descrittore
di file. Se le cifre in parola non specificano un descrittore di file
aperto per l'input, si verifica un errore di ridirezione. Se parola
risulta essere, dopo l'espansione, -, il descrittore di file n
viene chiuso. Se n non è specificato, è usato lo
standard input (descrittore di file 0).
L'operatore
è usato in modo analogo per duplicare i descrittori di file
di output. Se n non è specificato, è usato lo standard
output (descrittore di file 1). Se le cifre in parola non specificano
un descrittore di file aperto in output, si verifica un errore di
ridirezione. Se parola risulta essere, dopo l'espansione, -,
il descrittore di file file n viene chiuso.Come caso speciale, se
n è omesso, e parola non si espande in una o più
cifre o in -, lo standard output e lo standard error sono ridiretti
come descritto in precedenza.
L'operatore di ridirezione
muove il descrittore di file cifra al descrittore di file
n, o allo standard input (descrittore di file 0) se n non
è specificato. cifra è chiuso dopo essere stato
duplicato in n.
Analogamente l'operatore di ridirezione
muove il descrittore di file cifra al descrittore di file
n, o allo standard output (descrittore di file 1) se n non
è specificato.
L'operatore di ridirezione
fa sì che il file il cui nome è l'espansione di
parola venga aperto sia in lettura che in scrittura sul descrittore
di file n, o sul descrittore di file 0 se n non è
specificato. Se il file non esiste, viene creato.
Gli alias consentono di sostituire una stringa con una
parola se usata come prima parola di un comando semplice. La shell mantiene
una lista di alias che possono essere impostati e rimossi con i comandi
incorporati alias e unalias (si veda COMANDI
INCORPORATI DELLA SHELL più avanti). La prima parola di
ogni comando, se non virgolettata, viene controllata per vedere se a essa
è associato un alias. Se è questo il caso, la parola è
sostituita dal valore dell'alias. I caratteri /, $, ` e
=, e ognuno dei metacaratteri della shell o i caratteri di
quotatura elencati sopra non possono apparire in un nome di alias. Il testo
da sostituire può contenere qualunque input valido per la shell,
inclusi i metacaratteri della shell. La prima parola del testo così
sostituito è controllata per vedere se contiene alias, ma una parola
che coincide con l'alias che si sta espandendo non viene espansa una seconda
volta. Questo significa che si può far interpretare ls come
ls -F, per esempio, e bash non tenta di espandere
ulteriormente il testo così sostituito Se l'ultimo carattere del
valore di un alias è un blank, allora la successiva parola di
comando che segue l'alias è pure controllata per l'espansione di
alias.
Gli alias sono creati ed elencati con il comando alias e
rimossi con il comando unalias.
Non vi è alcun meccanismo per usare argomenti nel testo da
sostituire. Se servono degli argomenti, si dovrà usare una funzione
di shell (si veda FUNZIONI più avanti).
Gli alias non sono espansi quando la shell non è
interattiva, a meno che l'opzione di shell expand_aliases non sia
impostata mediante shopt (si veda la descrizione di shopt
sotto COMANDI INCORPORATI DELLA SHELL più
avanti).
Le regole che riguardano la definizione e l'uso degli alias
possono facilmente generare confusione. Bash legge sempre almeno una
riga completa di input, e tutte le righe che costituiscono un comando
composto, prima di eseguire qualsiasi comando di quella riga o il comanod
composto. Gli alias sono espansi quando un comando è letto, non
quando è eseguito. Perciò, una definizione di alias che appaia
sulla stessa riga che contiene già un altro comando non ha effetto
fino a che non è stata letta la successiva riga di input. I comandi
che seguono la definizione di un alias su una data riga non sono influenzati
da un nuovo alias. Questo comportamento è un problema anche quando
sono eseguite delle funzioni. Gli alias sono espansi quando viene letta una
definizione di funzione, non quando la funzione è eseguita,
poiché una definizione di funzione è essa stessa un comando.
Come conseguenza, gli alias definiti in una funzione sono disponibili solo
dopo che quella funzione è eseguita. Per maggior sicurezza, conviene
porre sempre le definizioni di alias su una riga separata e non usare
alias in comandi composti.
Quasi a tutti gli effetti, le finalità per cui sono usati
gli alias possono essere raggiunte usando invece funzioni di shell.
Una funzione di shell, definita come descritto prima in
GRAMMATICA DELLA SHELL, immagazzina una serie di comandi per
una futura esecuzione. Quando il nome di una funzione di shell
è usato come un nome di comando semplice, la lista di comandi
associati con quel nome di funzione viene eseguita. Le funzioni sono
eseguite nel contesto della shell corrente; nessun nuovo processo è
creato per interpretarle (a differenza di quanto avviene eseguendo uno
script di shell). Quando una funzione è eseguita, gli argomenti
passati alla funzione costituiscono i parametri posizionali della funzione
stessa. Il parametro speciale # viene aggiornato per riflettere il
cambiamento. Il parametro speciale 0 rimane inalterato. Il primo
elemento della variabile FUNCNAME è impostato al nome
della funzione durante l'esecuzione della funzione.
Tutti gli altri aspetti dell'ambiente di esecuzione della shell
sono identici tra una funzione e il suo chiamante con queste eccezioni: la
gestione dei segnali DEBUG e RETURN (si veda la
descrizione del comando incorporato trap sotto
COMANDI INCORPORATI DELLA SHELL più avanti), i
quali non sono ereditati a meno che alla funzione sia stato dato l'attributo
trace (si veda la descrizione del comando incorporato
declare più avanti) o l'opzione di shell -o
functrace sia stata abilitata per mezzo del comando incorporato
set (nel qual caso tutte le funzioni ereditano la gestione dei
segnali DEBUG e RETURN) e la gestione del segnale
ERR non viene ereditata a meno che l'opzione di shell
-o errtrace sia stata abilitata.
Variabili locali alla funzione possono essere dichiarate con il
comando incorporato local (variabili locali). Di solito, le
variabili e i loro valori sono condivise tra la funzione e il suo chiamante.
Se una variabile è dichiarata local, l'ambito visibile della
variabile è ristretto a quella funzione e ai suoi figli (comprese le
funzioni che chiama).
Nella descrizione che segue, il ambito corrente è la
funzione attualmente eseguita. Gli ambiti precedenti sono quelli del
chiamante della funzione e così via fino all'ambito
«globale» dove la shell non sta eseguendo nessuna funzione. Di
conseguenza, una variabile locale nell'ambito corrente è una
variabile dichiarata usando i comandi incorporati local o
declare nella funzione attualmente in esecuzione.
Le variabili locali oscurano le variabili con lo stesso nome
dichiarate negli ambiti precedenti. Per esempio, una variabile locale
dichiarata in una funzione nasconde una variabile globale con lo stesso
nome; i riferimenti e gli assegnamenti fanno riferimento alla variabile
locale, lasciando la variabile globale non modificata. Quando la funzione
restituisce un risultato, la variabile globale è nuovamente
visibile.
La shell usa l'ambiente dinamico per controllare la
visibilità delle variabili nelle funzioni. Nell'ambiente dinamico le
variabili visibili e i loro valori sono il risultato di sequenze di
invocazioni di funzioni che hanno causato l'esecuzione della funzione
attuale. Il valore della variabile che una funzione vede dipende dal suo
valore nel chiamante, se presente, che sia o meno l'ambiente globale o
quello di un'altra funzione. Questo è anche il valore che una
dichiarazione di variabile locale oscura, e il valore che viene ripristinato
quando la funzione ritorna.
Per esempio, se una variabile locale var è
dichiarata come locale in una funzione func1, e func1 chiama
un'altra funzione func2, i riferimenti a var fatti
dall'interno di func2 si risolveranno nella variabile locale definita
in func1, oscurando qualsiasi variabile globale denominata
var.
Il comando incorporato unset agisce secondo lo stesso
ambiente dinamico: se una variabile è locale all'ambiente corrente,
unset l'annullerà; altrimenti di riferirà alla
variabile in uno degli ambienti chiamanti come descritto sopra. Se una
variabile nell'ambiente corrente è annullata, rimarrà
così (cioè annullata) finché non viene ripristinata
nello stesso ambiente o fino al ritorno della funzione. Una volta che la
funzione ritorna, qualsiasi eventuale istanza di variabile dell'ambiente
precedente tornerà ad essere visibile. Se l'annullamento agisce su
una variabile di un ambiente precedente, verrà nuovamente resa
visibile una qualsiasi variabile che era stata oscurata (si veda oltre come
l'opzione di shell localvar_unset influenza questo
comportamento).
La variabile FUNCNEST, se impostata a un valore numerico
maggiore di 0, definisce un livello massimo di nidificazione. Le invocazioni
di funzione eccedenti tale limite provocano l'interruzione dell'intero
comando.
Se il comando incorporato return è eseguito in una
funzione, la funzione termina e l'esecuzione riprende con il comando che
viene subito dopo la chiamata di funzione. Qualsiasi comando associato con
la gestione del segnale RETURN viene eseguito prima di riprendere
l'esecuzione. Quando una funzione termina i valori dei parametri posizionali
e il parametro speciale # sono ripristinati ai valori che avevano
prima dell'esecuzione della funzione.
I nomi delle funzioni e le definizioni possono essere elencati con
l'opzione -f dei comandi incorporati declare o typeset.
L'opzione -F di declare o typeset elenca solo i nomi di
funzione (e opzionalmente il file d'origine e il numero di riga, se
l'opzione di shell extdebug è abilitata). Le funzioni possono
essere esportate, in modo che le shell figlie (quelle create eseguendo
ulteriori invocazioni di shell) le trovino automaticamente già
definite con l'opzione -f del comando incorporato export. Una
definizione di funzione può essere cancellata usando l'opzione
-f del comando incorporato unset.
Le funzioni possono essere ricorsive. La variabile FUNCNEST
può essere usata per limitare la profondità dello stack della
chiamata di funzione e restringere il numero di invocazioni della funzione.
Come impostazione predefinita, nessun limite è posto sul numero di
chiamate ricorsive.
La shell permette di calcolare espressioni aritmetiche, sotto
certe circostanze (si veda i comandi incorporati let e
declare, il comando composto (( e Espansione
aritmetica). Il calcolo viene fatta usando interi a larghezza fissa,
senza controllo di supero della capacità, sebbene la divisione per 0
sia intercettata e segnalata come errore. Gli operatori e la loro
precedenza, associatività e valori, sono gli stessi del linguaggio C.
La seguente lista di operatori è raggruppata per operatori di uguale
livello di precedenza. I livelli sono elencati in ordine di precedenza
decrescente.
- id++
id--
- post-incremento e post-decremento di una variabile
- - +
- meno e più unari
- ++id --id
- pre-incremento e pre-decremento di una variabile
- ! ~
- negazione logica e "bit a bit"
- **
- elevamento a potenza
- * / %
- moltiplicazione, divisione, modulo
- + -
- addizione, sottrazione
- << >>
- scorrimento "bit a bit" a sinistra e a destra
- <= >= < >
- confronto
- == !=
- uguaglianza e differenza
- &
- AND "bit a bit"
- ^
- OR esclusivo "bit a bit"
- |
- OR "bit a bit"
- &&
- AND logico
- ||
- OR logico
- espr?espr:espr
- operatore condizionale
- = *= /= %= += -= <<= >>= &= ^= |=
- assegnamento
- espr1 ,
espr2
- virgola
Le variabili di shell possono essere usate come operandi;
l'espansione di parametro è effettuata prima della valutazione
dell'espressione. All'interno di un'espressione, le variabili di shell
possono essere referenziate anche per nome senza bisogno di usare la
sintassi di espansione di parametro. Una variabile di shell nulla o rimossa
ha valore 0 se referenziata per nome senza l'uso della sintassi di
espansione di parametro. Il valore di una variabile è valutato come
un'espressione aritmetica quando è referenziata, o quando a una
variabile a cui è stato dato l'attributo integer con
declare -i è stato assegnato un valore. Un valore nullo viene
considerato come 0. Non c'è bisogno di dichiarare come intera
una variabile di shell per poterla usare in un'espressione.
Le costanti intere seguono la definizione del linguaggio C, senza
suffissi o o costanti di tipo carattere. Le costanti che iniziano per 0 sono
interpretate come numeri ottali. Uno 0x o 0X iniziale si usa per indicare
numeri esadecimali. Altrimenti, i numeri prendono la forma [base#]n,
dove l'opzionale base è un numero decimale tra 2 e 64 che
definisce la base aritmetica, e n è un numero espresso in
quella base. Se base# è omessa, è usata la base 10.
Quando si specifica n, se è richiesto un carattere che non sia
una cifra, le cifre maggiori di 9 sono rappresentate dalle lettere
minuscole, dalle lettere maiuscole, e da @ e _, in quest'ordine. Se la
base è minore o uguale a 36, le lettere minuscole e maiuscole
possono essere usate indifferentemente per rappresentare numeri compresi tra
10 e 35.
Gli operatori sono valutati in ordine di precedenza. Le
subespressioni tra parentesi sono valutate prima e possono prevalere sulle
regole di precedenza di cui sopra.
Le espressioni condizionali sono usate dal comando composto
[[ e dai comandi incorporati test e [ per verificare
attributi di file ed effettuare comparazioni aritmetiche e fra stringhe. I
comandi test e [ determinano il loro comportamento basato sul
numero d argomenti; si veda la descrizione di questi comandi per ogni altra
azione specifica del comando.
Le espressioni sono formate dalle seguenti primitive unarie o
binarie. Bash manipola parecchi nomi-file specialmente quando sono
usati in espressioni. Se il sistema operativo nel quale Bash è
in esecuzione fornisce questi file speciali, bash userà quelli;
altrimenti li emulerà internamente con questo comportamento: se
qualsiasi argomento di file di una delle primitive è della
forma /dev/fd/n, il descrittore di file n viene controllato.
Se l'argomento di file di una delle primitive è uno tra
/dev/stdin, /dev/stdout o /dev/stderr, il descrittore
di file 0, 1 o 2, rispettivamente, viene controllato.
Se non diversamente specificato, le primitive che operano su file
utilizzano eventuali collegamenti simbolici e operano sul file puntato dal
collegamento simbolico, invece che sul collegamento simbolico stesso.
Quando vengono usati con [[, gli operatori < e
> ordinano lessicograficamente usando la localizzazione corrente.
Il comando test usa l'ordinamento ASCII.
- -a file
- Vero se file esiste.
- -b file
- Vero se file esiste ed è un file speciale a blocchi.
- -c file
- Vero se file esiste ed è un file speciale a caratteri.
- -d file
- Vero se file esiste ed è una directory.
- -e file
- Vero se file esiste.
- -f file
- Vero se file esiste ed è un file normale.
- -g file
- Vero se file esiste ed è impostato il suo bit
set-group-id.
- -h file
- Vero se file esiste ed è un collegamento simbolico.
- -k file
- Vero se file ha il suo “sticky” bit impostato.
- -p file
- Vero se file esiste ed è una named pipe (FIFO).
- -r file
- Vero se file esiste ed è leggibile.
- -s file
- Vero se file esiste ed è di dimensione maggiore di zero
byte.
- -t fd
- Vero se il descrittore di file fd è aperto e si tratta di un
terminale.
- -u file
- Vero se file esiste ed è impostato il suo bit
set-user-id.
- -w file
- Vero se file esiste ed è scrivibile.
- -x file
- Vero se file esiste ed è eseguibile.
- -G file
- Vero se file esiste ed è di proprietà del gruppo
effettivo dell'utente.
- -L file
- Vero se file esiste ed è un collegamento simbolico.
- -N file
- Vero se file esiste ed è stato modificato dall'ultima volta
che è stato letto.
- -O file
- Vero se file esiste ed è di proprietà dell'id utente
effettivo.
- -S file
- Vero se file esiste ed è un socket.
- file1 -ef
file2
- Vero se file1 e file2 fanno riferimento allo stesso
dispositivo e agli stessi numeri di inode.
- file1 -nt
file2
- Vero se file1 è più recente (come data di modifica)
di file2 o se file1 esiste e file2 no.
- file1 -ot
file2
- Vero se file1 è più vecchio di file2, o se
file2 esiste e file1 no.
- -o optname
- Vero se l'opzione di shell optname è abilitata. Si veda
l'elenco delle opzioni sotto la descrizione dell'opzione -o al
comando incorporato set più avanti.
- -v
varname
- Vero se la variabile di shell varname è impostata (le
è stato assegnato un valore).
- -R varname
- Vero se la variabile di shell varname è impostata (le
è stato assegnato un valore) ed è un riferimento a un
nome.
- -z stringa
- Vero se la lunghezza di stringa è zero.
- stringa
- -n
stringa
- Vero se la lunghezza di stringa è diversa da zero.
- stringa1
== stringa2
- stringa1
= stringa2
- Vero se le stringhe sono uguali. Col comando test dovrebbe essere
usato = per conformità con lo standard POSIX. Quando
è usato col comando [[, effettua la ricerca di
corrispondenze come descritto precedentemente (Comandi
composti).
- stringa1
!= stringa2
- Vero se le stringhe non sono uguali.
- stringa1
< stringa2
- Vero se, lessicograficamente, stringa1 precede come ordine
stringa2.
- stringa1
> stringa2
- Vero se, lessicograficamente, stringa1 segue come ordine
stringa2.
- arg1 OP
arg2
- OP è uno tra -eq, -ne, -lt,
-le, -gt o -ge. Questi operatori aritmetici
binari risultano veri se arg1 è, rispettivamente, uguale,
non uguale, minore, minore o uguale, maggiore, o maggiore o uguale ad
arg2. Arg1 e arg2 possono essere numeri interi
positivi o negativi. Quando è usato col comando [[,
Arg1 e Arg2 sono valutati come espressioni aritmetiche (vedi
VALUTAZIONE ARITMETICA sopra).
Quando viene eseguito un comando semplice la shell effettua le
seguenti espansioni, assegnamenti e ridirezioni, da sinistra a destra, nel
seguente ordine.
- 1.
- Le parole che l'analizzatore ha individuato essere assegnamenti di
variabile (quelle che precedono il nome di comando) oppure ridirezioni
vengono messe da parte per un'elaborazione successiva.
- 2.
- Le parole che non sono assegnamenti di variabile o ridirezioni sono
espanse. Se è presente qualche parola dopo l'espansione, la prima
parola è considerata essere il nome del comando e le rimanenti
parole come argomenti dello stesso.
- 3.
- Le ridirezioni sono effettuate come descritte prima sotto
RIDIREZIONE.
- 4.
- Il testo dopo = in ogni assegnamento di variabile è
sottoposto a espansione della tilde, sostituzione di comando, espansione
aritmetica e rimozione dei caratteri di quotatura prima di venir assegnato
alla variabile.
Se non risulta nessun nome di comando, gli assegnamenti di
variabile influenzano l'ambiente di shell corrente. In questo caso (un
comando che consista di assegnamenti e ridirezioni) gli assegnamenti sono
effettuati prima delle ridirezioni. Altrimenti, le variabili sono aggiunte
all'ambiente del comando eseguito senza influenzare l'ambiente di shell
corrente. Se uno qualsiasi degli assegnamenti tenta di assegnare un valore a
una variabile in sola lettura, si verifica un errore e il comando è
terminato con uno stato diverso da zero.
Se non risulta nessun nome di comando le ridirezioni sono
effettuate ma senza influenzare l'ambiente di shell corrente. Se si verifica
un errore di ridirezione il comando è terminato con uno stato diverso
da zero.
Se è rimasto un nome di comando dopo l'espansione,
l'esecuzione procede come descritto sotto. Altrimenti, il comando esce. Se
una delle espansioni conteneva una sostituzione di comando lo stato di
uscita del comando è lo stato d'uscita dell'ultima sostituzione di
comando eseguita. Se non ci sono state sostituzioni di comando il comando
esce con uno stato d'uscita di zero.
Dopo che un comando è stato suddiviso in parole, se esso
risulta essere un comando semplice e di una lista opzionale di argomenti,
sono eseguite le seguenti azioni.
Se il nome del comando non contiene barra [/], la shell tenta di
localizzarla. Se esiste una funzione di shell con quel nome, viene invocata
quella funzione, come descritto prima in FUNZIONI. Se il nome
non corrisponde a una funzione, la shell lo cerca nella lista dei
comandi incorporati della shell. Se ne viene trovato uno corrispondente,
viene invocato quel comando incorporato.
Se il nome non è né una funzione di shell né
un comando incorporato, e non contiene alcuna barra [/], bash cerca
tra gli elementi della variabile PATH una directory che
contenga un file eseguibile con quel nome. Bash usa una
tabella hash [indicizzata] per ricordare i percorsi completi dei file
eseguibili (si veda hash sotto COMANDI INCORPORATI DELLA
SHELL più avanti). Una ricerca completa nelle directory
in PATH è effettuata solo se il comando non viene
trovato nella tabella hash. Se la ricerca non ha successo, la shell
cerca una funzione di shell, già definita, chiamata
command_not_found_handle. Se questa funzione esiste, viene invocata
in un ambiente di esecuzione separato col comando originale e gli argomenti
di quest'ultimo come suoi argomenti, e lo stato d'uscita della funzione
diventa lo stato d'uscita di quella subshell. Se quella funzione non
è definita, la shell stampa un messaggio di errore e ritorna uno
stato d'uscita di 127.
Se la ricerca ha successo, o se il nome del comando contiene uno o
più barre [/], la shell esegue il programma indicato in un ambiente
di esecuzione separato. L'argomento 0 è impostato al nome
specificato, e i rimanenti argomenti del comando sono impostati agli
argomenti specificati, se presenti.
Se quest'esecuzione non ha successo perché il file non
è in formato eseguibile e il file non è una directory, si
suppone che sia uno script di shell, cioè un file che contiene
comandi di shell, e viene generata una nuova shell per eseguirlo. Questa
subshell reinizializza se stessa, così che l'effetto è come se
fosse stata invocata una nuova shell per gestire lo script, con la
differenza che la lista delle posizioni dei comandi ricordati dalla shell
genitore (si veda hash più avanti sotto COMANDI
INCORPORATI DELLA SHELL) sono disponibili anche alla shell
figlia.
Se il programma è un file che inizia con #!, il
resto della prima riga del file stesso specifica un interprete da invocare.
La shell esegue l'interprete specificato su sistemi operativi che non
gestiscono questo formato eseguibile essi stessi. Gli argomenti per
l'interprete consistono di un singolo argomento opzionale che segue il nome
dell'interprete sulla prima riga del programma, seguito dal nome del
programma, seguito dagli argomenti forniti al comando, se ve ne sono.
La shell ha un ambiente di esecuzione, costituito da:
- file aperti ereditati dalla shell all'invocazione, come modificati dalle
ridirezioni fornite al comando incorporato exec
- la corrente directory di lavoro come impostata da cd, pushd
o popd, o ereditata dalla shell all'invocazione
- la maschera del modo di creazione dei file come impostata da umask
o ereditata dalla shell genitrice
- i segnali da intercettare impostati da trap
- parametri di shell che sono stati impostati da un assegnamento di
variabile o con set, o ereditati dalla shell genitrice
nell'ambiente
- funzioni di shell definite durante l'esecuzione o ereditate dalla shell
genitrice nell'ambiente
- opzioni abilitate all'invocazione (sia in modo predefinito che con
argomenti da riga di comando) o da set
- opzioni abilitate da shopt
- alias di shell definiti da alias
- vari ID di processo, inclusi quelli dei job in background, il valore di
$$ e il valore di PPID
Quando un comando semplice, diverso da una funzione incorporata o
da una funzione di shell, dev'essere eseguito, viene invocato in un ambiente
di esecuzione separato che comprende tutto quello che viene illustrato qui
di seguito. Se non altrimenti notato, i valori sono ereditati dalla
shell.
- i file aperti della shell, più qualsiasi modificazione e aggiunta
specificata dalle ridirezioni al comando
- la directory di lavoro corrente
- la maschera del modo di creazione dei file
- variabili di shell e funzioni dichiarate esportabili, insieme alle
variabili esportate per il comando, passate nell'ambiente
- i segnali da intercettare come da comando trap dalla shell sono riportati
ai valori ereditati dalla shell genitrice, e i segnali ignorati dalla
shell vengono ignorati
Un comando invocato in quest'ambiente separato non può
influenzare l'ambiente di esecuzione della shell [genitrice].
Una subshell è una copia del processo shell.
Sostituzione di comando, comandi raggruppati fra parentesi e
comandi asincroni sono invocati in un ambiente di subshell che è un
duplicato dell'ambiente di shell, con l'eccezione che i segnali intercettati
dalla shell sono riportati ai valori che la shell eredita dalla shell
genitrice all'invocazione. I comandi incorporati che sono invocati come
parte di una pipeline sono anch'essi eseguiti in un ambiente di subshell.
Modifiche fatte all'ambiente di subshell non possono influenzare l'ambiente
di esecuzione della shell [genitrice].
Le subshell create per eseguire sostituzioni di comando ereditano
il valore dell'opzione -e dalla shell genitrice. Quando non è
in modalità posix, bash toglie l'opzione -e in
tali subshell.
Se un comando è invocato da un & e il
job-control non è attivo, lo standard input predefinito per il
comando è il file vuoto /dev/null. Altrimenti il comando
invocato eredita i descrittori di file della shell chiamante come modificati
dalle ridirezioni.
Quando viene invocato un programma gli viene dato un vettore di
stringhe chiamato insieme delle variabili di ambiente. Questa
è una lista di coppie nome-valore, della forma
nome=valore.
La shell consente di manipolare l'ambiente in molti modi.
All'invocazione, la shell esamina il suo ambiente e crea un parametro per
ogni nome trovato, marcandolo automaticamente per essere esportato ai
processi figli. I comandi eseguiti ereditano l'ambiente. I comandi
export e declare -x permettono di aggiungere o togliere
dall'ambiente parametri e funzioni. Se il valore di un parametro d'ambiente
viene modificato, il nuovo valore diventa parte dell'ambiente, sostituendo
il valore precedente. L'ambiente ereditato da qualsiasi comando eseguito
è costituito dall'ambiente iniziale della shell, i cui valori possono
essere modificati nella shell, diminuiti di ogni coppia rimossa dal comando
unset, e aumentati da ogni aggiunta attraverso i comandi
export e declare -x.
L'ambiente per qualsiasi comando semplice o funzione
può essere ampliato temporaneamente premettendo degli assegnamenti di
parametro al comando stesso, come descritto prima in
PARAMETRI. Queste istruzioni di assegnamento
influenzano solo l'ambiente utilizzato da quel comando.
Se è impostata l'opzione -k (si veda il comando
incorporato set più avanti), tutti gli assegnamenti di
parametro sono resi disponibili nell'ambiente del comando, non solo quelli
che precedono il nome del comando.
Quando bash invoca un comando esterno, la variabile
_ viene impostata al nome completo del percorso del comando, e
passato a quel comando nel suo ambiente.
Lo stato d'uscita di un comando eseguito è il valore
ritornato dalla chiamata di sistema waitpid o da una funzione
equivalente. Gli stati d'uscita ricadono nell'intervallo fra 0 e 255 anche
se, come spiegato più avanti, la shell può usare valori
superiori a 125 in casi particolari. Anche gli stati d'uscita dei comandi
incorporati della shell e dei comandi composti sono circoscritti in questo
intervallo. In casi particolari la shell usa valori speciali per indicare
specifiche situazioni di insuccesso.
Ai fini della shell, un comando che termina con uno stato d'uscita
zero ha avuto successo. Uno stato d'uscita pari a zero indica successo. Uno
stato d'uscita diverso da zero indica errore. Quando un comando termina su
un segnale fatale N, bash usa il valore di 128+N come
stato d'uscita.
Se un comando non viene trovato, il processo figlio creato per
eseguirlo ritorna uno stato pari a 127. Se un comando viene trovato ma non
è eseguibile lo stato di ritorno è 126.
Se un comando non ha successo a causa di un errore durante
l'espansione o la ridirezione, lo stato d'uscita è maggiore di
zero.
I comandi incorporati della shell restituiscono uno stato di 0
(vero) in caso di successo, e diverso da zero (falso) in caso
di errore durante l'esecuzione. Tutti i comandi incorporati restituiscono
uno stato d'uscita di 2 per indicare l'uso scorretto, generalmente opzioni
non valide o argomenti mancanti.
Lo stato di uscita dell'ultimo comando è disponibile nel
parametro speciale $?.
Bash stessa ritorna lo stato d'uscita dell'ultimo comando
eseguito, a meno che non avvenga un errore di sintassi, nel qual caso essa
esce con un valore diverso da zero. Si veda anche il comando incorporato
exit più avanti.
Quando bash è interattiva, in assenza di ogni
segnale da intercettare col comando trap, ignora SIGTERM
(così che kill 0 non uccide una shell interattiva), e
SIGINT viene intercettato e gestito (così che
il comando incorporato wait è interrompibile). In tutti i
casi, bash ignora SIGQUIT. Se si usa il job-control,
bash ignora SIGTTIN,
SIGTTOU e SIGTSTP.
I comandi non incorporati invocati da bash hanno i gestori
di segnali impostati sui valori ereditati dalla shell dalla sua genitrice.
Quando non si usa il job-control, i comandi asincroni ignorano
SIGINT e SIGQUIT. in aggiunta a questi
gestori ereditati. I comandi eseguiti come risultato di una
sostituzione di comando ignorano i segnali di job-control generati da
tastiera SIGTTIN, SIGTTOU e
SIGTSTP.
Come comportamento predefinito, la shell esce al ricevimento di un
SIGHUP. Prima di uscire, una shell interattiva ri-invia un
segnale SIGHUP a tutti i job (richiesti tramite
job-control), in esecuzione o sospesi. Ai job sospesi viene inviato
un segnale SIGCONT per essere sicuri che ricevano il
segnale SIGHUP. Per prevenire l'invio del segnale da
parte della shell a un particolare job, quest'ultimo dovrebbe essere rimosso
dalla tabella dei job col comando incorporato disown (si veda
COMANDI INCORPORATI DELLA SHELL più avanti) o
contrassegnato per non ricevere SIGHUP usando disown
-h.
Se l'opzione di shell huponexit è stata impostata
con shopt, bash invia un segnale SIGHUP a tutti
i job quando una shell di login interattiva esce.
Se bash è in attesa che un comando finisca e riceve
un segnale per il quale è stato impostata un'intercettazione di
segnale, il comando relativo alla gestione del segnale viene eseguito solo
al termine del comando. Quando bash è in attesa della fine di
un comando asincrono attraverso il comando incorporato wait, la
ricezione di un segnale per il quale un'intercettazione di segnale è
stata impostata fa sì che il comando incorporato wait termini
immediatamente con uno stato d'uscita maggiore di 128, e immediatamente dopo
viene innescata la gestione del segnale intercettato.
Quando il controllo dei job non è abilitato e bash
è in attesa che il comando attivo termini, la shell riceve i segnali
controllati dalla tastiera come SIGINT (normalmente generato
da ^C) che gli utenti normalmente vogliono inviare al
comando. Questo succede perché la shell e il comando sono nello
stesso gruppo di processi del terminale, e ^C invia
SIGINT a tutti i processi del gruppo di processi.
Quando bash è eseguita con il controllo dei job non
abilitato e riceve SIGINT mentre attende che il processo
corrente termini, continua ad attendere che il comando termini e poi
decide come reagire a SIGINT:
- 1.
- Se il comando termina a causa di SIGINT, bash deduce
che l'utente volesse terminare l'esecuzione dell'intero script e
reagisce a SIGINT (cioè, esegue le trap di
SIGINT esce essa stessa);
- 2.
- Se il comando termina a seguito del SIGINT, allora il
programma gestisce SIGINT in autonomia senza
trattarlo come segnale fatale. In questo caso neppure bash
tratta SIGINT come segnale fatale, ma assume che
SIGINT sia stato usato come parte di una normale
operazione del programma (p.es., emacs lo usa per interrompere
l'immissione di un comando) oppure sia stato deliberatamente ignorato. In
ogni caso bash eseguirà tutti i comandi trap definiti per
SIGINT, così come fa per qualsiasi altro segnale
gestito da trap mentre è in attesa che il comando in
esecuzione termini, per compatibilità.
Il termine job-control si riferisce alla capacità di
fermare (sospendere) selettivamente l'esecuzione di processi e
continuare (riprendere) la loro esecuzione in seguito. Tipicamente,
un utente utilizza questa possibilità attraverso un'interfaccia
interattiva costituita congiuntamente dal driver del terminale del kernel
del sistema operativo e da bash.
La shell associa un job a ogni pipeline. Essa mantiene una
tabella dei job correntemente in esecuzione, che può essere
visualizzata con il comando jobs. Quando bash avvia un job in
modo asincrono (in background), stampa una riga tipo:
che indica che questo job è il job numero 1 e che l'ID di
processo dell'ultimo processo nella pipeline associata a questo job è
25647. Tutti i processi in una singola pipeline fanno parte dello stesso
job. Bash usa l'astrazione job come base per il
job-control.
Per facilitare l'implementazione dell'interfaccia utente per il
job-control, il sistema mantiene la nozione di ID del gruppo di processi
del terminale corrente. I membri di questo gruppo di processo (processi
il cui ID del gruppo di processo è uguale all'ID del gruppo di
processo del terminale corrente) ricevono segnali generati da tastiera, come
SIGINT. Si dice che questi processi sono in primo
piano (foreground - oppure sincroni). I processi in background
(sullo sfondo - oppure asincroni) sono quelli il cui ID del gruppo di
processo differisce da quello del terminale; tali processi sono immuni dai
segnali generati da tastiera. Solo ai processi in primo piano è
permesso di leggere o, se l'utente l'ha specificato con
stty tostop, scrivere sul terminale. Ai processi
nascosti che tentano di leggere dal terminale (o scriverci sopra quando
stty tostop è in azione) è inviato un
segnale SIGTTIN (SIGTTOU) dal driver del terminale del kernel,
che, se non intercettato, sospende il processo.
Se il sistema operativo sul quale bash è in
esecuzione supporta il job-control, bash è in grado di
utilizzarlo. Battere il carattere di sospensione (tipicamente
^Z, Control-Z) mentre un processo è in esecuzione, provoca la
sospensione di quel processo e restituisce il controllo a bash.
Battere il carattere di sospensione ritardata (tipicamente ^Y,
Control-Y) provoca la sospensione del processo quando questo tenta di
leggere input dal terminale, e la restituzione del controllo a bash.
Si può poi cambiare lo stato di questo job, usando il comando
bg per continuarlo in background, il comando fg per riportarlo
in primo piano, o il comando kill per farlo terminare. Un ^Z
ha effetto immediatamente, e ha l'effetto collaterale di causare la perdita
dell'output in sospeso e del "type ahead" (caratteri immessi a
terminale ma non ancora passati al programma).
Vi sono diversi modi per riferirsi a un job nella shell. Il
carattere % designa una specifica di job (jobspec). Un job con
numero n può essere indicato come %n. Un job può
anche essere indicato usando un prefisso del nome usato per avviarlo, o
usando una sottostringa che appare nella sua riga di comando. Per esempio,
%ce si riferisce a un job sospeso il cui nome di comando inizia con
ce. Se un prefisso corrisponde a più di un job, bash
restituisce un messaggio di errore. L'uso di %?ce, d'altra parte,
indica qualsiasi job che contiene la stringa ce nella sua riga di
comando. Se la sottostringa corrisponde a più di un job, bash
restituisce un messaggio di errore. I simboli %% e %+ si
riferiscono alla nozione della shell del job corrente, ossia l'ultimo
job sospeso mentre era in primo piano o avviato in background. Il job
precedente può essere referenziato usando %-. Se
c'è un solo job, %+ e %- possono essere usati entrambi
per far riferimento a quel job. Nell'output che riguarda i job (per esempio,
l'output del comando jobs), il job corrente è sempre segnalato
con un +, ed il job precedente con un -. Un singolo % (senza
alcuna specificazione associata) è pure un modo per designare il job
corrente.
La semplice menzione di un job può essere usata per
riportarlo in primo piano: %1 è un sinonimo per “fg
%1”, che porta il job 1 dal background al foreground (in primo
piano). Nello stesso modo, “%1 &” riprende
l'esecuzione del job 1 in background, ossia equivale a “bg
%1”.
La shell viene notificata immediatamente ogni volta che un job
cambia stato. Normalmente, bash aspetta finché non deve
stampare un prompt prima di informare dei cambiamenti nello stato di un job,
in modo da non interrompere alcun altro output. Se l'opzione -b del
comando incorporato set è impostata, bash riporta tali
cambiamenti immediatamente. Delle eventuali istruzioni di intercettazione
del segnale SIGCHLD viene eseguita per ogni processo
figlio che esce.
Se si tenta di uscire da bash mentre vi sono dei job
sospesi(o, se è stata abilitata l'opzione di shell checkjobs
usando il comando incorporato shopt, in esecuzione), la shell stampa
un messaggio di avvertimento e, se viene abilitata l'opzione
checkjobs, elenca i job e i loro stati. Si può quindi usare il
comando jobs per controllare il loro stato. Se si fa un secondo
tentativo per uscire senza immettere alcun altro comando, non si riceve
più il messaggio di avvertimento e ogni job sospeso viene
terminato.
Quando la shell è in attesa di un job o di un processo
usando il comando incorporato wait e il job-control è
abilitato, wait ritornerà lo stato di completamento quando il
job cambia stato. Con l'opzione -f wait attende finché
il job o il processo termina prima di ritornare.
Quando eseguita interattivamente, bash mostra il prompt
primario PS1 quando è pronta per leggere un comando, e
il prompt secondario PS2 quando è in attesa di
altro input per completare un comando. Bash mostra
PS0 dopo aver letto un comando ma prima di eseguirlo.
Bash mostra PS4 come descritto sopra prima di
tracciare ciascun comando quando è abilitata l'opzione -x.
Bash permette di personalizzare queste stringhe di prompt inserendo
un certo numero di caratteri speciali preceduti dalla barra inversa che sono
decodificati come segue:
- \a
- un carattere ASCII di campanello (07)
- \d
- la data nel formato "Giorno-della-settimana Mese Giorno" (ad
es., "Tue May 26")
- \D{formato}
- il formato viene passato a strftime(3) e il risultato
è inserito nella stringa di prompt; un formato vuoto genera
una rappresentazione di data/ora specifica della localizzazione. Le
parentesi graffe sono obbligatorie
- \e
- un carattere ASCII di escape (033)
- \h
- il nome dell'host fino al primo `.'
- \H
- il nome dell'host
- \j
- il numero di job attualmente gestiti dalla shell
- \l
- il basename del terminale in cui è eseguita la shell
- \n
- newline [su una nuova riga]
- \r
- ritorno carrello
- \s
- il nome della shell, il basename di $0 (la parte che segue l'ultima
barra [/])
- \t
- l'ora corrente nel formato HH:MM:SS 24 ore
- \T
- l'ora corrente nel formato HH:MM:SS 12 ore
- \@
- l'ora corrente nel formato am/pm 12 ore
- \A
- l'ora corrente nel formato HH:MM 24 ore
- \u
- il nome-utente dell'utente corrente
- \v
- la versione di bash (ad es., 2.00)
- \V
- la release di bash, versione + livello di patch (ad es.,
2.00.0)
- \w
- il valore della variabile di shell PWD ($PWD), con
$HOME abbreviato da una tilde (usa il valore della
variabile PROMPT_DIRTRIM)
- \W
- il nome senza il percorso completo di $PWD, con
$HOME abbreviato con una tilde
- \!
- il numero nella cronologia del comando attuale
- \#
- il numero di comando del comando attuale
- \$
- se l'UID effettivo è 0, un #, altrimenti un $
- \nnn
- il carattere [ASCII] che corrisponde al numero ottale nnn
- \\
- una barra inversa
- \[
- marca l'inizio di una sequenza di caratteri non stampabili, che può
essere usata per includere nel prompt una sequenza di controllo del
terminale
- \]
- marca la fine di una sequenza di caratteri non stampabili
Il numero del comando e il numero nella cronologia sono
generalmente differenti: il numero della cronologia di un comando è
la sua posizione nella lista della cronologia, la quale può includere
comandi preesistenti nel file di cronologia (si veda
CRONOLOGIA più avanti), mentre il numero del
comando è la posizione nella sequenza dei comandi eseguiti durante la
corrente sessione di shell. Dopo che la stringa è decodificata, essa
è espansa attraverso l'espansione di parametro, la sostituzione di
comando, l'espansione aritmetica e la rimozione dei caratteri di quotatura,
secondo quanto specificato dal valore dell'opzione di shell
promptvars (si veda più avanti la descrizione del comando
shopt in COMANDI INCORPORATI DELLA SHELL). Questo
può avere degli effetti collaterali indesiderati se porzioni
della stringa protette appaiono all'interno di una sostituzione di comando o
contengono caratteri speciali all'espansione di parola.
Questa è la libreria che gestisce la lettura dell'input
quando si usa una shell interattiva, a meno che non si specifichi l'opzione
--noediting all'invocazione della shell. La modifica di riga è
usata anche quando viene passata l'opzione -e al comando incorporato
read. Come comportamento predefinito, i comandi per l'editor della
riga comandi sono simili a quelli di Emacs. È anche disponibile
un'interfaccia per editor di riga in stile vi. La modifica di riga
può essere abilitata in ogni momento con le opzioni -o emacs o
-o vi del comando incorporato set (si veda COMANDI
INCORPORATI DELLA SHELL più avanti). Per chiudere l'editor
di riga dopo l'esecuzione della shell utilizzare l'opzione +o
emacs o +o vi del comando incorporato set.
In questa sezione, si usa la notazione in stile Emacs per indicare
i tasti da battere. I tasti di controllo sono indicati da C-tasto,
per esempio, C-n significa Control-N. In modo simile, i meta tasti
sono indicati da M-tasto, cioè M-x significa Meta-X. (Sulle
tastiere senza un tasto meta, M-x significa ESC x,
cioè, si preme il tasto Escape e poi il tasto x. Questo rende
ESC il meta prefisso. La combinazione M-C-x significa
ESC-Control-x, ossia si preme il tasto Escape poi si tiene il tasto
Control mentre si preme il tasto x).
Ai comandi readline possono essere specificati argomenti
numerici, che normalmente sono dei contatori di ripetizione. A volte,
tuttavia, è il segno dell'argomento a essere significativo. Passando
un argomento negativo a un comando che agisce in avanti (ad es.,
kill-line), il comando agisce nella direzione opposta. I comandi il
cui comportamento con gli argomenti è diverso da questo sono indicati
più avanti.
Quando un comando è descritto come eliminazione di
testo, il testo cancellato viene salvato per un possibile riutilizzo futuro
(yanking). Il testo eliminato viene salvato in un kill-ring.
Eliminazioni consecutive provocano l'accumulazione del testo in una
unità, che può essere recuperata tutta in una volta. Comandi
che non eliminano testo separano parti di testo nel kill-ring.
Readline è personalizzata inserendo comandi in un file di
inizializzazione (il file inputrc). Il nome di questo file è
preso dal valore della variabile INPUTRC. Se questa variabile
non è definita il valore predefinito è
~/.inputrc. Se quel file non esiste o non può essere letto, il
valore predefinito ultimo è /etc/inputrc. Quando un programma
che usa la libreria readline viene avviato, viene letto il file di
inizializzazione, e vengono impostate le associazioni di tasti e assegnate
le variabili. Ci sono solo alcuni costrutti base consentiti nel file
d'inizializzazione di readline. Le righe vuote sono ignorate. Le righe che
iniziano con un # sono commenti. Le righe che iniziano con un
$ indicano costrutti condizionali. Le altre righe indicano
associazioni di tasti e impostazioni di variabili.
Le associazioni di tasti predefiniti possono essere cambiate con
un file inputrc. Altri programmi che usano questa libreria possono
aggiungere i loro propri comandi e associazioni.
Per esempio, porre
M-Control-u: universal-argument
o
C-Meta-u: universal-argument
nel file inputrc farebbe eseguire a M-C-u il comando della readline
universal-argument.
Sono riconosciuti i seguenti nomi simbolici di carattere:
RUBOUT, DEL, ESC, LFD, NEWLINE,
RET, RETURN, SPC, SPACE e TAB.
In aggiunta al nome del comando, readline consente che a un tasto
corrisponda una stringa che è inserita quando quel tasto è
premuto (una macro).
La sintassi per il controllo delle associazioni dei tasti nel file
inputrc è semplice. Tutto quel che è richiesto è
il nome del comando o il testo di una macro e una sequenza di tasti alla
quale dovrà essere associato. Il nome può essere specificato
in uno di due modi: come nome simbolico di un tasto, eventualmente con i
prefissi Meta- o Control-, o come una sequenza di tasti.
Quando si usa la forma nome-tasto:nome-funzione o
macro, nome-tasto è il nome di un tasto in inglese. Per
esempio:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
Negli esempi precedenti, C-u viene collegato alla funzione
universal-argument, M-DEL viene collegato alla funzione
backward-kill-word, e C-o viene collegato all'esecuzione della
macro indicata sul lato destro (cioè, inserire il testo ``>
output'' nella riga).
Nella seconda forma,
"sequenza-tasti":nome-funzione o macro,
sequenza-tasti differisce da nome-tasto visto sopra, per il
fatto che la stringa che denota un'intera sequenza di tasti può
essere specificata ponendo la sequenza fra virgolette. Alcuni tasti di
protezione (escape) nello stile GNU Emacs possono essere usati, come nei
seguenti esempi, ma i nomi simbolici dei caratteri non si possono
utilizzare.
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
In questo esempio, C-u viene ancora collegato alla funzione
universal-argument. C-x C-r viene collegato alla funzione
re-read-init-file, e ESC [ 1 1 ~ viene collegato
all'inserimento del testo ``Function Key 1''.
L'insieme completo delle sequenze di protezione (escape) in stile
GNU Emacs è
- \C-
- prefisso control
- \M-
- prefisso meta
- \e
- un carattere di escape
- \\
- barra inversa
- \"
- il carattere "
- \'
- il carattere '
In aggiunta alle sequenze di protezione che iniziano col tasto
escape in stile GNU Emacs, è disponibile un secondo insieme di
sequenze di protezione che iniziano con la barra inversa:
- \a
- avviso (segnale acustico)
- \b
- backspace
- \d
- cancella [delete - tasto Del o Canc]
- \f
- salto pagina
- \n
- newline [su una nuova riga]
- \r
- ritorno carrello
- \t
- tabulazione orizzontale
- \v
- tabulazione verticale
- \nnn
- il carattere a otto bit il cui valore è il valore ottale nnn
(da una a tre cifre)
- \xHH
- il carattere a otto bit il cui valore è il valore esadecimale
HH (una o due cifre esadecimali)
Quando si inserisce il testo di una macro, apostrofi o virgolette
devono essere usati per indicare una definizione di macro. Un testo non
quotato si suppone che sia un nome di funzione. Nel corpo della macro, i
segni di protezione \ descritti prima vengono espansi. La barra
inversa quota qualsiasi altro carattere nel testo della macro, inclusi
" e '.
Bash permette di mostrare o modificare le associazioni
correnti dei tasti di readline con il comando incorporato bind. La
modalità di modifica può essere cambiata durante l'uso
interattivo usando l'opzione -o del comando incorporato set
(si veda COMANDI INCORPORATI DELLA SHELL più
avanti).
Readline ha delle variabili che possono essere usate per
personalizzare ulteriormente il suo comportamento. Una variabile può
essere impostata nel file inputrc con un'istruzione della forma
set nome-variabile valore
o usando il comando incorporato bind (si veda COMANDI
INCORPORATI DELLA SHELL più avanti).
Tranne dove diversamente indicato, le variabili di readline
possono avere i valori On o Off (senza distinzione fra
maiuscole e minuscole). I nomi di variabile non riconosciuti vengono
ignorati. Quando viene letto un valore di variabile, i valori vuoti o nulli,
"on" (senza distinzione fra maiuscole e minuscole) o "1"
sono equivalenti a On. Tutti gli altri valori sono equivalenti a
Off. Le variabili e i loro valori predefiniti sono:
- active-region-start-color
- Una variabile stringa che controlla il colore del testo e dello sfondo
quando si mostra del testo nella regione attiva (vedere la descrizione di
enable-active-region più avanti). Questa stringa non deve
prendere una posizione fisica sullo schermo, quindi deve solo consistere
in sequenze escape di terminale. Viene inviata al terminale prima di
mostrare del testo nella regione attiva. Questa variabile è
reimpostata al valore predefinito quando il tipo di terminale cambia. Il
valore predefinito è la stringa che mette il terminale il
modalità evidenziata (standout), così come ottenuta della
descrizione di terminfo del terminale. Un valore di esempio è
"\e[01;33m".
- active-region-end-color
- Una variabile stringa che ripristina gli effetti di
active-region-start-color e riporti il terminale alla condizione
normale dopo aver mostrato del testo nella regione attiva. Questa stringa
non deve prendere una posizione fisica sullo schermo, quindi deve solo
consistere in sequenze escape di terminale. Viene inviata al terminale
dopo aver mostrato del testo nella regione attiva. Questa variabile
è reimpostata al valore predefinito quando il tipo di terminale
cambia. Il valore predefinito è la stringa che ripristina il
terminale dopo la modalità evidenziata (standout), così come
ottenuta della descrizione di terminfo del terminale. Un valore di esempio
è "\e[0m".
- bell-style
(audible)
- Controlla cosa succede se readline vuole usare il segnalatore acustico del
terminale. Se impostato a none, readline non emette alcun segnale.
Se impostato a visible, readline usa un segnalatore visivo se
disponibile. Se impostato a audible, readline tenta di attivare il
segnalatore acustico del terminale.
- bind-tty-special-chars
(On)
- Se impostato a On, readline tenta di associare i caratteri di
controllo trattati in modo speciale dal driver del terminale nel kernel
agli equivalenti degli stessi come descritti da readline.
- blink-matching-paren
(Off)
- Se impostato a On, readline tenta di muovere rapidamente il cursore
verso una parentesi aperta quando è inserita una parentesi
chiusa.
- colored-completion-prefix
(Off)
- Se impostato a On, quando elenca i completamenti, readline
visualizza il prefisso comune della serie dei possibili completamenti
usando un colore diverso. La definizione dei colori viene presa dal valore
della variabile d'ambiente LS_COLORS. Se in $LS_COLORS
c'è una definizione per il suffisso personalizzato
"readline-colored-completion-prefix", allora readline usa questo
colore per il prefisso comune al posto di quello predefinito.
- colored-stats
(Off)
- Se impostata a On, readline visualizza i possibili completamenti
usando colori diversi per indicare il tipo di file. Le definizioni dei
colori sono prese dalla variabile d'ambiente LS_COLORS.
- La stringa che è inserita quando è eseguito il comando
insert-comment. Questo comando è associato a M-# in
modalità comandi Emacs e a # in modalità comandi di
vi.
- completion-display-width
(-1)
- Il numero di colonne sullo schermo per visualizzare le possibili
corrispondenze quando si effettua il completamento. Il valore è
ignorato se è minore di 0 o maggiore della dimensione dello
schermo. Con un valore di 0 viene visualizzata una corrispondenza per
riga. Il valore predefinito è -1.
- completion-ignore-case
(Off)
- Se impostato a On, readline effettua l'individuazione dei nomi-file
e il completamento senza distinguere le lettere maiuscole dalle lettere
minuscole.
- completion-map-case
(Off)
- Se impostato a On, e completion-ignore-case è
abilitato, readline tratta i trattini (-) e i trattini bassi
(_) come equivalenti quando effettua una ricerca e completamento di
nomi-file senza distinzione di minuscolo/maiuscolo.
- completion-prefix-display-length
(0)
- La lunghezza in caratteri del prefisso comune di una lista di possibili
completamenti che è visualizzata senza modifiche. Quando è
impostata a un valore maggiore di zero, i prefissi comuni più
lunghi di questo valore sono rimpiazzati da puntini di sospensione quando
vengono visualizzati possibili completamenti.
- completion-query-items
(100)
- Questo determina a che punto interpellare l'utente per visualizzare i
possibili completamenti generati dal comando possible-completions.
Può essere impostato a un numero intero maggiore o uguale a zero.
Se il numero di possibili completamenti è maggiore o uguale al
valore di questa variabile, readline chiederà se l'utente desidera
vederli o no; altrimenti essi sono semplicemente elencati sul terminale.
Il valore zero indica che readline non deve mai chiedere; valori negativi
sono trattati come lo zero.
- convert-meta
(On)
- Se impostato a On, readline converte i caratteri con l'ottavo bit
uguale a 1 a una sequenza di caratteri ASCII eliminando l'ottavo bit e
aggiungendo come prefisso un carattere di protezione (in pratica, usando
l'escape come il prefisso meta). Il predefinito è On,
ma readline lo imposterà a Off se la localizzazione contiene
caratteri a otto bit. Questa variabile dipende dalla categoria di
localizzazione LC_CTYPE, e può cambiare alla modifica della
localizzazione.
- disable-completion
(Off)
- Se impostato a On, readline inibisce il completamento della parola.
I caratteri di completamento saranno inseriti nella riga come se fossero
stati mappati come self-insert.
- echo-control-characters
(On)
- Quando è impostato a On, sui sistemi operativi che lo
supportano, readline visualizza un carattere corrispondente a un segnale
generato dalla tastiera.
- editing-mode
(emacs)
- Controlla se readline parte con un insieme di associazioni di tasti simile
a Emacs o vi. editing-mode (modalità di
modifica) può essere impostato a emacs o a vi.
- emacs-mode-string
(@)
- Se la variabile show-mode-in-prompt è abilitata, questa
stringa viene mostrata immediatamente prima dell'ultima riga del prompt
primario nel caso che sia attiva la modalità di editing di emacs.
Il valore è espanso come una combinazione di tasti, quindi i
prefissi standard meta- e quello di controllo e le sequenze escape con
backslash sono disponibili. Usare gli escape \1 e \2 per iniziare e
terminare sequenze di caratteri non stampabili, che possono essere usate
per inserire sequenze di controllo del terminale nella stringa di
modalità.
- enable-active-region
(On)
- Il punto è la posizione attuale del cursore, e segno
si riferisce ad una posizione del cursore salvata. Il testo tra il punto e
il segno viene denominato come regione. Quando questa variabile
è impostata a On, readline permette a certi comandi di
impostare come attiva la regione. Quando la regione è
attiva, readline evidenzia il testo nella regione usando
active-region-start-color, che ha come valore predefinito il testo
che mette il terminale in modalità evidenziata. La regione attiva
mostra il testo inserito come incollato senza interpretazione
(bracketed-paste) e ogni testo corrispondente a ricerche incrementali e
non incrementali.
- enable-bracketed-paste
(On)
- Quando impostato a On, readline configura il terminale
perché ogni volta che si incolli dagli appunti nel buffer di
modifica questo avvenga per l'intera stringa senza interpretarla,
cioè senza trattare ogni carattere come se fosse stato inserito da
tastiera. Questo impedisce a readline di eseguire comandi altrimenti
attivati da sequenze di caratteri presenti nel testo incollato.
- enable-keypad
(Off)
- Quando impostato a On, readline tenta di abilitare il tastierino
numerico se viene utilizzato. Alcuni sistemi richiedono questo per
abilitare i tasti-freccia.
- enable-meta-key
(On)
- Quando è impostato a On, readline tenta di abilitare
qualsiasi meta tasto modificatore che il terminale dichiara di supportare
quando viene chiamato. Su molti terminali il meta tasto è usato per
inviare caratteri a otto bit.
- expand-tilde
(Off)
- Se impostato a On, l'espansione della tilde è effettuata
quando readline tenta il completamento della parola.
- history-preserve-point
(Off)
- Se impostato a On, il codice che implementa la cronologia tenta di
piazzare il cursore nel punto in cui si trovava su ogni riga della
cronologia visualizzata con previous-history o
next-history.
- history-size
(unset)
- Definisce il numero massimo di voci salvate nella cronologia. Se impostata
a zero, vengono cancellate tutte le voci esistenti e nessuna nuova voce
viene salvata. Se impostata a un numero minore di zero, il numero di
registrazioni è illimitato. Come impostazione predefinita, il
numero di voci di cronologia è impostato al valore della variabile
di shell HISTSIZE. Se si tenta di impostare history-size a
un valore non numerico, il numero massimo di voci della cronologia
sarà 500.
- horizontal-scroll-mode
(Off)
- Quando impostato a On, richiede a readline di usare una sola riga
per la visualizzazione, facendo scorrere l'input in orizzontale su una
sola riga dello schermo quando essa risulti più lunga della
larghezza dello schermo, invece che andando a capo su una nuova riga.
Quest'impostazione è abilitata automaticamente nei terminali di
altezza 1.
- input-meta
(Off)
- Se impostato a On, readline abilita l'input a otto bit
(cioè, non toglie l'ottavo bit dai caratteri che legge),
indipendentemente da quello che il terminale dichiara di supportare. Il
nome meta-flag è un sinonimo per questa variabile. Il
predefinito è Off, ma readline lo imposterà a
On se la localizzazione contiene caratteri a otto bit. Questa
variabile dipende dalla categoria della localizzazione LC_CTYPE e
può cambiare al variare della localizzazione.
- isearch-terminators
(“C-[C-J”)
- Una stringa di caratteri che fa terminare una ricerca incrementale senza
eseguire successivamente il carattere come se fosse un comando. Se a
questa variabile non è stato dato un valore, i caratteri ESC
e C-J fanno terminare una ricerca incrementale.
- keymap
(emacs)
- Imposta la mappa corrente dei tasti di readline. Il set dei nomi validi
per le mappe dei tasti è emacs, emacs-standard, emacs-meta,
emacs-ctlx, vi, vi-command e vi-insert. vi è
equivalente a vi-command; emacs è equivalente a
emacs-standard. Il valore predefinito è emacs; il
valore di editing-mode determina anche la mappa dei tasti
predefiniti.
- keyseq-timeout
(500)
- Specifica quanto tempo readline attenderà un carattere
quando legge una sequenza di tasti ambigua (una che può formare una
sequenza di tasti completa usando l'input letto finora, o può
accettare un input aggiuntivo per completare una sequenza di tasti
più lunga). Se non riceve nessun input entro il tempo limite,
readline userà la sequenza di tasti più corta tra
quelle possibili. Il valore è specificato in millisecondi,
cosicché un valore di 1000 vuol dire che readline
attenderà un secondo per un input aggiuntivo. Se questa variabile
è impostata a un valore minore o uguale a zero, o a un valore non
numerico, readline attenderà fino a che non sia premuto un
altro tasto per decidere quale sequenza di tasti completare.
- mark-directories
(On)
- Se impostata a On, ai nomi delle directory completate è
aggiunta una barra [/] alla fine.
- mark-modified-lines
(Off)
- Se impostato a On, le righe della cronologia che sono state
modificate sono mostrate precedute da un asterisco (*).
- mark-symlinked-directories
(Off)
- Se impostato a On, i nomi completati che sono collegamenti
simbolici a directory hanno una barra [/] alla fine (se richiesto tramite
mark-directories).
- match-hidden-files
(On)
- Questa variabile, se impostata a On, fa sì che readline
mostri anche i file i cui nomi iniziano con un `.' (file nascosti) quando
effettua il completamento del nome-file. Se impostata a Off, il `.'
iniziale dev'essere fornito dall'utente come parte del nome-file da
completare.
- Se impostato a On, il completamento del menù visualizza il
prefisso comune della lista di possibili completamenti (che può
essere vuota) prima di scorrere ciclicamente la lista.
- output-meta
(Off)
- Se impostato a On, readline mostra i caratteri con l'ottavo bit
impostato direttamente, piuttosto che con una sequenza di protezione
avente come prefisso meta. Il predefinito è Off, ma readline
lo imposterà a On se la localizzazione contiene caratteri a
otto bit. Questa variabile è influenzata dalla categoria di
localizzazione LC_CTYPE e può cambiare se la localizzazione
cambia.
- page-completions
(On)
- Se impostato a On, readline usa un paginatore interno simile a
more per mostrare i possibili completamenti una schermata alla
volta.
- print-completions-horizontally
(Off)
- Se impostato a On, readline mostra i completamenti ordinati in
ordine alfabetico orizzontalmente, piuttosto che dall'alto in basso.
- revert-all-at-newline
(Off)
- Se impostato a On, readline annulla tutte le modifiche alle righe
della cronologia prima di ritornare, quando viene eseguito
accept-line. In modo predefinito, le righe della cronologia possono
essere modificate e mantengono liste dei singoli annullamenti mediante
chiamate a readline.
- show-all-if-ambiguous
(Off)
- Questo cambia il comportamento predefinito delle funzioni di
completamento. Se impostato a On, le parole che hanno più di
un possibile completamento provocano la visualizzazione immediata delle
coincidenze invece che l'attivazione del segnalatore acustico.
- show-all-if-unmodified
(Off)
- Questo cambia il comportamento predefinito delle funzioni di completamento
in maniera simile a show-all-if-ambiguous. Se impostato a
On, le parole che hanno più di un possibile completamento
senza alcun possibile completamento parziale (ovvero i possibili
completamenti non hanno alcun prefisso in comune) sono elencate
immediatamente invece che provocare l'attivazione del segnalatore
acustico.
- show-mode-in-prompt
(Off)
- Se impostata a On, aggiunge una stringa all'inizio del prompt che
indica la modalità di modifica: emacs (@), vi comando (:) o vi
inserimento (+). Le stringhe della modalità sono impostabili
dall'utente (p.es. emacs-mode-string).
- skip-completed-text
(Off)
- Se impostato a On, altera il comportamento predefinito del
completamento quando viene inserita una corrispondenza nella riga.
È attivo solo quando si effettua il completamento a metà di
una parola. Se abilitato, readline non inserisce, dopo il completamento
della parola, caratteri provenienti dal completamento che corrispondono ai
caratteri della parola da completare che si trovano dopo il cursore; in
tal modo porzioni di parola che seguono il cursore non vengono
duplicati.
- vi-cmd-mode-string
((cmd))
- Se la variabile show-mode-in-prompt è abilitata, questo
testo viene mostrato immediatamente prima dell'ultima riga del prompt
primario quando è attiva la modalità vi e si è in
modalità comando. Il valore è espanso come una combinazione
tasti, quindi il normale insieme di prefissi meta- e control- e le
sequenze escape sono disponibili. Usare le sequenze \1 e \2 come escape
per l'inizio e la fine di sequenze di caratteri non visualizzabili, che
possono essere usate per includere sequenze di controllo del terminale nel
testo mode-string.
- vi-ins-mode-string
((ins))
- Se la variabile show-mode-in-prompt è abilitata, questo
testo viene mostrato immediatamente prima dell'ultima riga del prompt
primario quando è attiva la modalità vi e si è in
modalità inserimento. Il valore è espanso come una
combinazione tasti, quindi il normale insieme di prefissi meta- e control-
e le sequenze escape sono disponibili. Usare le sequenze \1 e \2 come
escape per l'inizio e la fine di sequenze di caratteri non visualizzabili,
che possono essere usate per includere sequenze di controllo del terminale
nel testo mode-string.
- visible-stats
(Off)
- Se impostato a On, un carattere che denota un tipo di file come
riportato da stat(2) è accodato al nome-file durante
l'elencazione dei possibili completamenti.
Readline implementa un servizio simile, nello spirito, a quello
della compilazione condizionale nel preprocessore C, e che permette di
effettuare associazioni di tasti e impostazioni di variabili in base al
risultato di test. Vi sono tre direttive di controllo usate.
- $if
- Il costrutto $if permette che le associazioni siano fatte in base
alla modalità di modifica, al terminale in uso o all'applicazione
che fa uso di readline. Il testo da verificare, dopo qualsiasi operatore
di confronto, arriva fino alla fine della riga; a meno che non sia
diversamente specificato, nessun carattere che lo delimiti è
richiesto.
- mode
- La forma mode= della direttiva $if è usata per
verificare se readline è in modo emacs o vi. Questo può
essere usato in congiunzione con il comando set keymap, per
esempio, per impostare le associazioni delle mappe dei tasti di
emacs-standard e emacs-ctlx solo se readline è
avviata in modo emacs.
- term
- La forma term= può essere usata per includere associazioni
di tasti specifiche per un terminale, magari per associare le sequenze di
tasti emesse dai tasti funzione dei terminali. La parola a destra dell'
= viene confrontata con il nome completo del terminale e la parte
del nome del terminale che precede il primo -. Questo permette, ad
esempio, a sun di trovare una corrispondenza sia con sun che
con sun-cmd.
- version
- Il test version può essere usato per effettuare confronti su
versioni specifiche di readline. version viene espanso che la
versione di readline corrente. L'insieme di operatori di confronto include
=, (e ==), !=, <=, >=,
< e >. Il numero di versione fornito alla destra
dell'operatore consiste del numero maggiore della versione, un punto
decimale opzione e il numero minore di versione, sempre opzionale (es.
7.1). Se la versione minore è omessa, viene assunto che sia
0. L'operatore può essere separato dalla stringa
version e dal numero di versione con spazi.
- application
- Il costrutto application è usato per includere impostazioni
specifiche per un'applicazione. Ogni programma che usa la libreria
readline imposta il nome applicazione, e un file di
inizializzazione può poi fare un test per un particolare valore.
Questo può essere usato per associare sequenze di tasti a funzioni
utili per uno specifico programma. Per esempio, il comando seguente
aggiunge una sequenza di tasti che quota la parola corrente o la parola
precedente in bash:
$if Bash
# Quota la parola corrente o precedente
"\C-xq": "\eb\"\ef\""
$endif
- variabile
- Il costrutto variable fornisce un semplice test di eguaglianza per
variabili di readline e valori. Gli operatori di confronto ammessi sono
=, ==, e !=. Il nome della variabile deve essere
separato dall'operatore di confronto da spazi; l'operatore deve essere
separato dal valore alla sua destra da spazi. Possono essere confrontate
sia variabili booleane che testuali. Le variabili booleane devono essere
confrontate con i valori on e off.
- $endif
- Questo comando, come si è visto nell'esempio precedente, fa
terminare un comando $if.
- $else
- I comandi in questa parte della direttiva $if sono eseguiti se il
test non risulta verificato.
- $include
- Questa direttiva prende un unico nome-file come argomento e legge comandi
e associazioni da quel file. Per esempio, la seguente direttiva legge
/etc/inputrc:
Readline è dotato di comandi per cercare nella cronologia
dei comandi (si veda CRONOLOGIA più avanti) righe
contenenti una stringa specifica. Ci sono due modalità di
ricerca: incrementale e non-incrementale.
La ricerca incrementale inizia prima che l'utente abbia finito di
immettere la stringa di ricerca. Mentre ogni carattere della stringa di
ricerca viene battuto, readline mostra la prima linea dalla cronologia che
corrisponde alla stringa battuta finora. Una ricerca incrementale richiede
solamente il numero minimo di caratteri necessari per trovare l'elemento
della cronologia desiderato. I caratteri presenti nel valore della variabile
isearch-terminators sono usati per delimitare una ricerca
incrementale. Se a quella variabile non è stato assegnato un valore,
i caratteri di Escape e Control-J fanno arrestare una ricerca incrementale.
Control-G interrompe una ricerca incrementale e ripristina la riga
originale. Quando è terminata la ricerca, l'elemento della cronologia
contenente la stringa di ricerca diventa la riga corrente.
Per trovare altri elementi nell'elenco della cronologia, battere
Control-S o Control-R secondo il caso. Viene eseguita così una
ricerca all'indietro o in avanti nella cronologia del successivo elemento
che corrisponde alla stringa di ricerca che è stata immessa. Ogni
altra sequenza di tasti associata a un comando readline pone termine alla
ricerca ed esegue il comando presente nella linea. Per esempio, un
newline provoca l'interruzione della ricerca e accetta la riga,
eseguendo così il comando proveniente dall'elenco della
cronologia.
Readline ricorda l'ultima stringa di ricerca incrementale. Se due
Control-R vengono battuti senza che siano intervenuti caratteri che
definiscono una nuova stringa di ricerca, viene utilizzata la stringa di
ricerca memorizzata al momento.
Le ricerche non incrementali leggono l'intera stringa di ricerca
prima di avviare la ricerca per individuare righe nella cronologia. La
stringa di ricerca può essere battuta dall'utente o essere parte del
contenuto della riga corrente.
La seguente è una lista di nomi dei comandi e delle
sequenze di tasti predefiniti a cui essi sono collegati. Nomi di comando
senza una sequenza di tasti collegata a essi sono scollegati in modo
predefinito. Nelle descrizioni seguenti, punto si riferisce alla
posizione corrente del cursore e marca alla posizione del cursore
salvata col comando set-mark. Il testo fra il punto e la marca
è indicato come regione.
- beginning-of-line
(C-a)
- Si sposta all'inizio della riga corrente.
- end-of-line
(C-e)
- Si sposta alla fine della riga.
- forward-char
(C-f)
- Si sposta avanti di un carattere.
- backward-char
(C-b)
- Si sposta indietro di un carattere.
- forward-word
(M-f)
- Si sposta in avanti fino alla fine della parola successiva. Le parole sono
composte di caratteri alfanumerici (lettere e cifre).
- backward-word
(M-b)
- Si sposta indietro all'inizio della parola corrente o precedente. Le
parole sono composte di caratteri alfanumerici (lettere e cifre).
- shell-forward-word
- Si sposta in avanti fino alla fine della parola successiva. Le parole sono
delimitate da metacaratteri di shell non quotati.
- shell-backward-word
- Si sposta indietro all'inizio della parola corrente o precedente. Le
parole sono delimitate da metacaratteri di shell non quotati.
- previous-screen-line
- Cerca di spostare il punto alla stessa colonna dello schermo della
precedente riga dello schermo. Questo non avrà l'effetto desiderato
se l'attuale readline non occupa più di una riga fisica o se il
punto non è maggiore della lunghezza del prompt sommata alla
larghezza dello schermo.
- next-screen-line
- Cerca di spostare il punto alla stessa colonna dello schermo della
successiva riga dello schermo. Questo non avrà l'effetto desiderato
se l'attuale readline non occupa più di una riga fisica o se il
punto non è maggiore della lunghezza del prompt sommata alla
larghezza dello schermo.
- clear-display
(M-C-l)
- Pulisce lo schermo e, se possibile, il buffer per rivedere quanto presente
in precedenza (scrollback) sul terminale, poi riscrive la riga corrente,
lasciandola in cima allo schermo.
- clear-screen
(C-l)
- Pulisce lo schermo, poi riproduce la riga corrente, lasciando la riga
corrente in cima allo schermo. Con un argomento, rilegge la riga corrente
senza ripulire lo schermo.
- redraw-current-line
- Rinfresca la riga corrente.
- accept-line (Newline,
Return)
- Accetta la riga senza curarsi di dove sia il cursore. Se questa riga non
è vuota, è aggiunta alla lista della cronologia in accordo
con lo stato della variabile HISTCONTROL. Se la riga
è una riga di cronologia modificata, allora ripristina la
riga di cronologia al suo stato originale.
- previous-history
(C-p)
- Prende il precedente comando dalla lista della cronologia, spostandosi
indietro nella lista.
- next-history
(C-n)
- Prende il successivo comando dalla lista della cronologia, spostandosi
avanti nella lista.
- beginning-of-history
(M-<)
- Si sposta alla prima riga nella cronologia.
- end-of-history
(M->)
- Si sposta alla fine della cronologia dell'input, cioè, alla riga
che si sta inserendo.
- operate-and-get-next
(C-o)
- Accetta la riga corrente per l'esecuzione e prende dalla cronologia la
riga successiva a quella corrente, per la modifica. Un argomento numerico,
se presente, specifica l'elemento della cronologia da usare al posto della
riga corrente.
- fetch-history
- Con un argomento numerico, prende l'elemento dalla cronologia e lo rende
riga corrente. Senza argomento, si sposta indietro al prima elemento della
cronologia.
- reverse-search-history
(C-r)
- Cerca all'indietro partendo dalla riga corrente spostandosi in `su'
attraverso la cronologia come necessario. Questa è una ricerca
incrementale.
- forward-search-history
(C-s)
- Cerca in avanti partendo dalla riga corrente e spostandosi in `giù'
attraverso la cronologia come necessario. Questa è una ricerca
incrementale.
- non-incremental-reverse-search-history
(M-p)
- Cerca all'indietro attraverso la cronologia, partendo dalla riga corrente,
una stringa fornita dall'utente, usando una ricerca non incrementale.
- non-incremental-forward-search-history
(M-n)
- Cerca in avanti attraverso la cronologia una stringa fornita dall'utente,
usando una ricerca non incrementale.
- history-search-forward
- Cerca in avanti attraverso la cronologia una stringa di caratteri tra
l'inizio della riga corrente e il punto del cursore. Questa è una
ricerca non incrementale.
- history-search-backward
- Cerca all'indietro attraverso la cronologia una stringa di caratteri tra
l'inizio della riga corrente e il punto del cursore. Questa è una
ricerca non incrementale.
- history-substring-search-backward
- Cerca all'indietro attraverso la cronologia una stringa di caratteri tra
l'inizio della riga corrente e la posizione corrente del cursore (il
punto). La stringa di ricerca può cercare corrispondenze
dovunque in una riga della cronologia. Questa è una ricerca non
incrementale.
- history-substring-search-forward
- Cerca in avanti attraverso la cronologia una stringa di caratteri tra
l'inizio della riga corrente e il punto del cursore. La stringa di ricerca
può cercare corrispondenze dovunque in una riga della cronologia.
Questa è una ricerca non incrementale.
- yank-nth-arg
(M-C-y)
- Inserisce il primo argomento del comando precedente (generalmente la
seconda parola sulla riga precedente) alla posizione del cursore. Con un
argomento n, inserisce la n-sima parola del comando
precedente (le parole nel comando precedente iniziano con la parola 0). Un
argomento negativo inserisce la n-sima parola dalla fine del
comando precedente. Una volta che l'argomento n è calcolato,
l'argomento è estratto come se l'espansione della cronologia
"!n" sia stata specificata.
- yank-last-arg (M-.,
M-_)
- Inserisce l'ultimo argomento del comando precedente (l'ultima parola della
precedente riga di cronologia). Con un argomento numerico, si comporta
esattamente come yank-nth-arg. Chiamate consecutive a
yank-last-arg percorrono l'elenco della cronologia all'indietro,
inserendo ogni volta l'ultima parola (o la parola specificata
dall'argomento della prima chiamata) di ogni riga. Qualsiasi argomento
numerico fornito a queste chiamate successive determina la direzione di
scorrimento nella cronologia. Un argomento negativo commuta la direzione
di scorrimento (all'indietro o in avanti). I servizi dell'espansione della
cronologia sono usati per estrarre l'ultima parola, come se fosse stata
specificata l'espansione della cronologia "!$".
- shell-expand-line
(M-C-e)
- Espande la riga nello stesso modo in cui lo fa la shell. Questo espande
gli alias e la cronologia così come tutte le parole della shell. Si
veda ESPANSIONE DELLA CRONOLOGIA più avanti per una
descrizione dell'espansione della cronologia.
- history-expand-line
(M-^)
- Effettua l'espansione della cronologia sulla riga corrente. Si veda
ESPANSIONE DELLA CRONOLOGIA più avanti per una
descrizione dell'espansione della cronologia.
- magic-space
- Effettua l'espansione della cronologia sulla riga corrente e inserisce uno
spazio. Si veda ESPANSIONE DELLA CRONOLOGIA più
avanti per una descrizione dell'espansione della cronologia.
- alias-expand-line
- Effettua l'espansione degli alias sulla riga corrente. Si veda
ALIAS sopra per una descrizione dell'espansione degli
alias.
- history-and-alias-expand-line
- Espande la cronologia e gli alias sulla riga corrente.
- insert-last-argument
(M-., M-_)
- Un sinonimo di yank-last-arg.
- edit-and-execute-command
(C-x C-e)
- Invoca un editor sulla riga di comando corrente ed esegue il risultato
come comandi di shell. Bash tenta di invocare
$VISUAL, $EDITOR e emacs come
editor, in quest'ordine.
- fine-del-file
(generalmente C-e)
- Il carattere che indica fine-del-file come impostato, per esempio, da
``stty''. Se questo carattere viene letto quando non ci sono caratteri
sulla riga, e il punto è all'inizio della riga, readline lo
interpreta come fine dell'input e ritorna EOF.
- delete-char
(C-d)
- Cancella il carattere nel punto del cursore. Se questa funzione è
associata allo stesso carattere come il carattere EOF della tty,
come C-d normalmente è, si veda sopra per gli effetti.
- backward-delete-char
(Rubout)
- Cancella il carattere dopo il cursore. Quando è dato un argomento
numerico, salva il testo cancellato sul kill-ring.
- forward-backward-delete-char
- Cancella il carattere sotto il cursore, a meno che il cursore non sia alla
fine della riga, nel qual caso il carattere dietro al cursore viene
cancellato.
- quoted-insert (C-q,
C-v)
- Aggiunge il successivo carattere battuto sulla riga in modo letterale.
Questo è il modo per inserire caratteri come C-q, per
esempio.
- tab-insert (C-v
TAB)
- Inserisce un carattere tab.
- self-insert
(a, b, A, 1, !, ...)
- Inserisce il carattere battuto.
- transpose-chars
(C-t)
- Trascina il carattere prima del punto del cursore in avanti sopra il
carattere nel punto, spostando anche il punto in avanti. Se il punto
è alla fine della riga, traspone i due caratteri prima del punto.
Argomenti negativi non hanno effetto.
- transpose-words
(M-t)
- Trascina la parola prima del punto del cursore dopo la parola oltre il
punto, spostando inoltre il punto sopra quella parola. Se il punto
è alla fine della riga, allora traspone le ultime due parole sulla
riga.
- upcase-word
(M-u)
- Rende maiuscola la parola corrente (o seguente). Con un argomento
negativo, opera sulla parola precedente, ma non sposta il punto del
cursore.
- downcase-word
(M-l)
- Rende minuscola la parola corrente (o seguente). Con un argomento
negativo, opera sulla parola precedente, ma non sposta il punto del
cursore.
- capitalize-word
(M-c)
- Rende maiuscola la prima lettera della parola corrente (o seguente). Con
un argomento negativo, opera sulla parola precedente, ma non sposta il
punto del cursore.
- overwrite-mode
- Alterna fra modalità inserimento e modalità di
sovrascrittura. Con un argomento numerico esplicito positivo passa alla
modalità sovrascrittura. Con un argomento numerico esplicito non
positivo passa alla modalità inserimento. Questo comando riguarda
solo la modalità emacs; la modalità vi
sovrascrive in modo diverso. Ogni chiamata a readline() viene
avviata in modalità inserimento. In modalità sovrascrittura
i caratteri associati a self-insert sostituiscono il testo nel
punto del cursore piuttosto che sospingere il testo verso destra. I
caratteri associati a backward-delete-char sostituiscono il
carattere prima del punto con uno spazio. Questo comando è non
associato in modo predefinito.
- kill-line
(C-k)
- Elimina il testo dal punto del cursore fino alla fine della riga.
- backward-kill-line
(C-x Rubout)
- Elimina all'indietro fino all'inizio della riga.
- unix-line-discard
(C-u)
- Elimina all'indietro dal punto del cursore fino all'inizio della riga. Il
testo eliminato viene salvato nel kill-ring.
- kill-whole-line
- Elimina tutti i caratteri sulla riga corrente, non importa dove sia il
punto del cursore.
- kill-word
(M-d)
- Elimina dal punto del cursore fino alla fine della parola corrente o, se
tra parole, fino alla fine della successiva parola. I delimitatori di
parola sono gli stessi usati da forward-word.
- backward-kill-word
(M-Rubout)
- Elimina la parola dietro il punto del cursore. I delimitatori di parole
sono gli stessi usati da forward-word.
- shell-kill-word
- Elimina dal punto del cursore fino alla fine della parola corrente o, se
tra parole, fino alla fine della parola successiva. I delimitatori di
parola sono gli stessi usati da shell-forward-word.
- shell-backward-kill-word
- Elimina la parola dietro il punto del cursore. I delimitatori di parola
sono gli stessi usati da shell-backward-word.
- unix-word-rubout
(C-w)
- Elimina la parola dietro il punto del cursore, usando gli spazi bianchi
come delimitatori di parola. Il testo eliminato è salvato nel
kill-ring.
- unix-filename-rubout
- Elimina la parola prima del punto del cursore, usando uno spazio bianco e
il carattere barra [/] come delimitatori di parola. Il testo eliminato
è salvato nel kill-ring.
- delete-horizontal-space
(M-\)
- Cancella tutti gli spazi e i tab attorno al punto del cursore.
- kill-region
- Elimina il testo nella regione corrente.
- copy-region-as-kill
- Copia il testo nella regione sul kill buffer.
- copy-backward-word
- Copia la parola prima del punto del cursore sul kill buffer. I
delimitatori di parola sono gli stessi di backward-word.
- copy-forward-word
- Copia la parola dopo il punto del cursore sul kill buffer. I delimitatori
di parola sono gli stessi di forward-word.
- yank (C-y)
- Copia il contenuto in cima al kill-ring e lo pone nel buffer nel punto del
cursore.
- yank-pop
(M-y)
- Ruota il kill-ring, e copia la nuova cima. Funziona solo dopo yank
o yank-pop.
- digit-argument (M-0, M-1,
..., M--)
- Aggiunge questa cifra all'argomento che sta già accumulando, o
inizia un nuovo argomento. M-- avvia un argomento negativo.
- universal-argument
- Questo è un altro modo per specificare un argomento. Se il comando
è seguito da una o più cifre, opzionalmente con un segno
meno iniziale, queste cifre definiscono l'argomento. Se il comando
è seguito da cifre, eseguendo universal-argument di nuovo
termina l'argomento numerico, ma a parte questo viene ignorato. Come caso
speciale, se questo comando è seguito immediatamente da un
carattere che non è né una cifra né un segno meno, il
contatore degli argomenti per il comando successivo è moltiplicato
per quattro. Il contatore è inizialmente uno, così eseguendo
questa funzione la prima volta il contatore diventa quattro, la seconda
volta il contatore diventa sedici, e così via.
- complete
(TAB)
- Tenta di effettuare il completamento del testo che precede il punto del
cursore. Bash tenta il completamento trattando il testo,
rispettivamente, come una variabile (se il testo inizia con $),
nome di utente (se il testo comincia con ~), nome di host (se il
testo comincia con @) o comando (inclusi alias e funzioni). Se
nessuno di questi produce un risultato, viene tentato il completamento del
nome-file.
- possible-completions
(M-?)
- Elenca i possibili completamenti del testo che precede il punto del
cursore.
- insert-completions
(M-*)
- Inserisce tutti i completamenti del testo che precede il punto del cursore
che sarebbero stati generati da possible-completions.
- Simile a complete, ma sostituisce la parola da completare con una
corrispondenza singola dalla lista dei possibili completamenti.
Un'esecuzione ripetuta di menu-complete scorre la lista dei
possibili completamenti, inserendo una corrispondenza alla volta. Alla
fine della lista dei completamenti viene emesso un segnale acustico
(dipendente dall'impostazione di bell-style) e il testo originale
è ripristinato. Con un argomento n si sposta di n
posizioni in avanti nella lista dei completamenti individuati; può
essere usato un argomento negativo per spostarsi all'indietro nella lista.
Questo comando è da associare normalmente al tasto TABP,
però non è associato in modo predefinito.
- Identico a menu-complete, ma si muove in senso inverso nella lista
dei possibili completamenti, come se menu-complete avesse ricevuto
un argomento negativo. Come comportamento predefinito, questo comando non
ha restrizioni.
- delete-char-or-list
- Cancella il carattere sotto il cursore se non si trova all'inizio o alla
fine della riga (simile a delete-char). Se è alla fine della
riga, si comporta in modo identico a possible-completions. Come
comportamento predefinito, questo comando non è associato.
- complete-filename
(M-/)
- Tenta il completamento del nome del file sul testo che precede il punto
del cursore.
- possible-filename-completions
(C-x /)
- Elenca i possibili completamenti del testo che precede il punto del
cursore, trattandolo come un nome-file.
- complete-username
(M-~)
- Tenta il completamento del testo che precede il punto del cursore,
trattandolo come un nome di utente.
- possible-username-completions
(C-x ~)
- Elenca i possibili completamenti del testo che precede il punto del
cursore, trattandolo come un nome di utente.
- complete-variable
(M-$)
- Tenta il completamento del testo che precede il punto del cursore,
trattandolo come una variabile di shell.
- possible-variable-completions
(C-x $)
- Elenca i possibili completamenti del testo che precede il punto del
cursore, trattandolo come una variabile di shell.
- complete-hostname
(M-@)
- Tenta il completamento del testo che precede il punto del cursore,
trattandolo come un nome di host.
- possible-hostname-completions
(C-x @)
- Elenca i possibili completamenti del testo che precede il punto del
cursore, trattandolo come un nome di host.
- complete-command
(M-!)
- Tenta il completamento del testo che precede punto del cursore,
trattandolo come nome di comando. Il completamento di comando tenta di far
combaciare il testo confrontandolo con alias, parole riservate, funzioni
di shell, comandi incorporati di shell e, da ultimo, nomi-file eseguibili,
in quest'ordine.
- possible-command-completions
(C-x !)
- Elenca i possibili completamenti del testo che precede il punto del
cursore, trattandolo come un nome di comando.
- dynamic-complete-history
(M-TAB)
- Tenta il completamento del testo che precede il cursore, confrontando il
testo con le righe della cronologia cercando le possibili corrispondenze
di completamento.
- dabbrev-expand
- Tenta il completamento del menù sul testo che precede il punto del
cursore, confrontando il testo con le righe della lista della cronologia
cercando le possibili corrispondenze di completamento.
- complete-into-braces
(M-{)
- Effettua il completamento del nome-file e inserisce la lista dei possibili
completamenti racchiusi tra parentesi graffe, rendendo la lista
disponibile per la shell (si veda Espansione delle parentesi graffe
sopra).
- start-kbd-macro (C-x
()
- Inizia a salvare i caratteri battuti nella corrente macro di
tastiera.
- end-kbd-macro (C-x
))
- Smette di salvare i caratteri battuti nella corrente macro di tastiera e
memorizza la definizione.
- call-last-kbd-macro (C-x
e)
- Riesegue l'ultima macro di tastiera definita, facendo sì che i
caratteri nella macro appaiano come se fossero stati battuti sulla
tastiera.
- print-last-kbd-macro
()
- Stampa l'ultima macro di tastiera definita in un formato adatto per il
file inputrc.
- re-read-init-file (C-x
C-r)
- Legge il contenuto del file inputrc, e incorpora ogni associazione
o assegnamento di variabile che trova.
- abort (C-g)
- Annulla il corrente comando di modifica ed emette il segnale acustico del
terminale (dipendente dall'impostazione di bell-style).
- do-lowercase-version (M-A, M-B,
M-x, ...)
- Se il carattere x battuto assieme al tasto Meta è maiuscolo,
esegue il comando collegato al corrispondente carattere minuscolo. Il
comportamento è indefinito se x è già
minuscolo.
- prefix-meta
(ESC)
- Definisce come tasto Meta il successivo carattere battuto.
ESC f è equivalente a
Meta-f.
- undo (C-_, C-x
C-u)
- Undo incrementale, memorizzato separatamente per ogni riga.
- revert-line
(M-r)
- Annulla tutti i cambiamenti fatti su questa riga. Questo è come
eseguire il comando undo un numero di volte sufficiente a riportare
la riga al suo stato iniziale.
- tilde-expand
(M-&)
- Effettua l'espansione della tilde sulla parola corrente.
- set-mark (C-@,
M-<space>)
- Imposta la marca in corrispondenza del punto del cursore. Se viene fornito
un argomento numerico la marca viene impostato a quella posizione.
- exchange-point-and-mark
(C-x C-x)
- Scambia il punto del cursore con la marca. La posizione corrente del
cursore è impostata alla posizione salvata, e la vecchia posizione
del cursore è salvata come marca.
- character-search
(C-])
- Viene letto un carattere e il punto del cursore è spostato
all'occorrenza successiva di quel carattere. Un contatore negativo cerca
occorrenze precedenti.
- character-search-backward
(M-C-])
- Viene letto un carattere e il punto del cursore è spostato
all'occorrenza precedente di quel carattere. Un contatore negativo cerca
occorrenze successive.
- skip-csi-sequence
- Legge abbastanza caratteri da esaurire una sequenza di combinazione di
tasti come quelle definite per tasti quali Home e End. Queste sequenze
iniziano con un Control Sequence Indicator (CSI), generalmente ESC-[. Se
questa sequenza è collegata a "\[", i tasti che producono
tali sequenze non hanno alcun effetto, a meno che non siano collegati
esplicitamente a un comando readline, invece di inserire caratteri sparsi
nel buffer di modifica. Come impostazione predefinita, questo comando non
ha restrizioni, ma in genere è collegato a ESC-[.
- insert-comment
(M-#)
- Senza un argomento numerico il valore della variabile readline
comment-begin è inserito all'inizio della riga corrente. Se
è fornito un argomento numerico questo comando agisce come un
interruttore: se i caratteri all'inizio della riga non corrispondono al
valore di comment-begin, il valore viene inserito, altrimenti i
caratteri in comment-begin vengono cancellati dall'inizio della
riga. In entrambi i casi la riga viene accettata come se fosse stato
battuto un codice di fine riga (newline). Il valore predefinito di
comment-begin fa sì che questo comando trasformi la riga
corrente in un commento di shell. Se un argomento numerico provoca la
rimozione del carattere di commento, la riga verrà eseguita dalla
shell.
- spell-correct-word (C-x
s)
- Effettua la correzione sulla parola corrente, trattandola come directory o
nome file, esattamente come fare l'opzione di shell cdspell. I
delimitatori di parola sono gli stessi usati da
shell-forward-word.
- glob-complete-word
(M-g)
- La parola prima del punto del cursore è trattata come un modello
per l'espansione del percorso, con un asterisco aggiunto alla fine
implicitamente. Questo modello viene usato per generare una lista di nomi
di file corrispondenti a possibili completamenti.
- glob-expand-word (C-x
*)
- La parola prima del punto del cursore è trattata come un modello
per l'espansione del percorso, e la lista dei nomi-file individuati viene
inserita, sostituendo la parola. Se viene fornito un argomento numerico
viene aggiunto alla fine un asterisco prima dell'espansione del
percorso.
- glob-list-expansions
(C-x g)
- Viene mostrata la lista delle espansioni che sarebbero state generate da
glob-expand-word e la riga è ridisegnata. Se viene fornito
un argomento numerico, un asterisco è aggiunto prima
dell'espansione del percorso.
- dump-functions
- Stampa tutte le funzioni e le loro associazioni di tasti sul file di
output di readline. Se è fornito un argomento numerico, l'output
è formattato in modo tale da poter essere inserito in un file
inputrc.
- dump-variables
- Stampa tutte le variabili readline impostabili e i loro valori sul file di
output di readline. Se viene fornito un argomento numerico l'output
è formattato in modo tale da poter essere inserito in un file
inputrc.
- dump-macros
- Stampa tutte le sequenze di tasti readline associate a macro e le stringhe
da loro prodotte. Se viene fornito un argomento numerico l'uscita è
formattata in modo tale da poter essere inserito in un file
inputrc.
- display-shell-version
(C-x C-v)
- Mostra l'informazione sulla versione della corrente istanza di
bash.
Quando viene tentato il completamento della parola per un
argomento di un comando per il quale una specifica di completamento (una
compspec) è stata definita col comando incorporato
complete (si veda COMANDI INCORPORATI DELLA SHELL
più avanti), vengono invocati i servizi di completamento
programmabile.
Per prima cosa viene identificato il nome del comando. Se la
parola del comando è la stringa vuota (completamento tentato
all'inizio di una riga vuota), viene usato ogni compspec definito con
l'opzione -E di complete. Se un comspec è stato
definito per quel comando, il comspec è usato per generare la lista
dei possibili completamenti per la parola. Se il nome del comando è
un percorso completo di file, viene ricercato per primo un comspec per il
percorso completo. Se non viene trovato nessun comspec per il percorso
completo viene fatto un tentativo per trovare un comspec per la porzione che
segue la barra [/] finale. Se queste ricerche non risultano in un compspec,
viene usato come predefinito ogni compspec definito con l'opzione -D
di complete. Se non c'è un comspec predefinito, bash
tenta l'espansione dell'alias sulla parola di comando come ultima
alternativa, e tenta di trovare un comspec per la parola di comando da ogni
espansione andata a buon fine.
Un volta trovato un comspec, questo è usato per generare la
lista delle parole corrispondenti. Se non viene trovato un comspec, viene
effettuato il completamento di bash predefinito come descritto in
precedenza, sotto Completamento.
Per prima cosa, sono usate le azioni specificate dal comspec. Sono
restituite solo le corrispondenze che iniziano con la parola che dev'essere
completata. Quando viene usata l'opzione -f o -d per il
completamento del nome-file o della directory, la variabile di shell
FIGNORE è usata per filtrare le
corrispondenze.
In seguito, viene generato qualsiasi completamento specificato da
un modello di espansione del nome di percorso all'opzione -G. Le
parole generate dal modello non devono necessariamente corrispondere alla
parola che dev'essere completata. La variabile di shell
GLOBIGNORE non è usata per filtrare le
corrispondenze, ma viene usata la variabile
FIGNORE.
In seguito, viene considerata la stringa specificata come
argomento all'opzione -W. La stringa è prima suddivisa usando
i caratteri nella variabile speciale IFS come delimitatori.
È rispettata la quotatura della shell. Ogni parola viene poi
espansa usando espansione delle parentesi graffe, espansione della tilde,
espansione di parametro e di variabile, sostituzione di comando ed
espansione aritmetica, come descritto in precedenza, sotto
ESPANSIONE. I risultati sono suddivisi usando le
regole sopra descritte sotto Suddivisione in parole. I risultati
dell'espansione sono confrontati con la parte iniziale della parola che
dev'essere completata, e quelli che corrispondono diventano i possibili
completamenti.
Dopo che queste corrispondenze sono state generate, viene invocata
qualsiasi funzione di shell o comando specificato con le opzioni -F e
-C. Quando il comando o funzione viene invocata, alle variabili
COMP_LINE, COMP_POINT,
COMP_KEY e COMP_TYPE sono
assegnati valori come descritto in precedenza, sotto Variabili di
shell. Quando una funzione di shell sta per essere invocata, le
variabili COMP_WORDS e COMP_CWORD sono
pure impostate. Quando viene invocata una funzione o comando, il
primo argomento ( $1) è il nome del comando i cui argomenti
sono stati completati, il secondo argomento ( $2) è la parola
da completare e il terzo argomento ( $3) è la parola che
precede la parola da completare sulla riga di comando corrente. Non viene
eseguita nessuna azione di filtro sui completamenti generati confrontandoli
con la parola da completare; la funzione o comando ha libertà
completa nel generare le corrispondenze.
Qualsiasi funzione specificata con -F viene invocata per
prima. La funzione può usare uno qualsiasi dei servizi di shell,
incluso il comando incorporato compgen descritto più avanti,
per generare le corrispondenze. la funzione deve mettere i possibili
completamenti della variabile vettore COMPREPLY, uno per
elemento di vettore.
In seguito, qualsiasi comando specificato con l'opzione -C
viene invocato in un ambiente equivalente alla sostituzione di comando.
Questo dovrebbe stampare una lista di completamenti, uno per riga, sullo
standard output. Una barra inversa può essere usata per proteggere un
newline, se necessario.
Una volta generati tutti i possibili completamenti, ogni filtro
specificato con l'opzione -X viene applicato alla lista. Il filtro
è un modello come quello usato per l'espansione di percorso; una
& nel modello è sostituita col testo della parola da
completare. Una & letterale si può indicare con una barra
inversa di protezione; la barra inversa viene rimossa prima della ricerca di
una corrispondenza. Ogni completamento che corrisponde al modello viene
rimosso dalla lista. Un ! iniziale nega il modello; in questo caso
ogni completamento non corrispondente al modello viene rimosso. Se l'opzione
di shell nocasematch è abilitata, il confronto è
effettuato senza distinzione fra maiuscole e minuscole nei caratteri
alfabetici.
Infine, qualsiasi prefisso e suffisso specificato dalle opzioni
-P e -S è aggiunto a ogni membro della lista di
completamento e il risultato è restituito al codice di completamento
readline come lista di completamenti possibili.
Se le azioni precedentemente applicate non generano
corrispondenze, e a complete era stata fornita l'opzione -o
dirnames quando era stato definito comspec, viene tentato il
completamento come nome di directory.
Se a complete era stata fornita l'opzione -o
plusdirs quando era stato definito comspec, viene tentato il
completamento come nomi di directory e qualunque corrispondenza è
aggiunta ai risultati delle altre azioni.
Come comportamento predefinito, se viene trovato un comspec,
qualsiasi cosa generi viene restituito al codice di completamento come
insieme completo di completamenti possibili. I completamenti di bash
predefiniti non vengono tentati, e la readline predefinita del completamento
del nome-file è disabilitata. Se l'opzione -o bashdefault era
stata fornita a complete al momento della definizione di comspec, i
completamenti predefiniti di bash vengono tentati se il comspec non
genera corrispondenze. Se l'opzione -o default era stata fornita a
complete al momento della definizione di comspec, i completamenti
predefiniti di readline vengono effettuati se il comspec (e, se tentato, il
completamento predefinito di bash) non genera corrispondenze.
Quando un comspec indica che è desiderato il completamento
come nome di directory, le funzioni di completamento programmabile forzano
readline ad aggiungere una barra [/] ai nomi completati che sono
collegamenti simbolici a directory, dipendente dal valore della variabile di
readline mark-directories, indipendentemente dall'impostazione della
variabile di readline mark-symlinked-directories.
Ci sono alcuni metodi per modificare dinamicamente i
completamenti. Ciò è molto utile quando usato in combinazione
con un completamento predefinito specificato con complete -D. Per le
funzioni di shell eseguite come manipolatori di completamento è
possibile richiedere di ritentare il completamento indicando il ritorno di
uno stato d'uscita di 124. Se una funzione di shell ritorna 124, e cambia il
compspec associato al comando sul quale si sta tentando il completamento
(fornito come primo argomento quando viene eseguita la funzione), il
completamento programmabile riparte dall'inizio, col tentativo di trovare un
nuovo compspec per quel comando. Questo permette a una serie di
completamenti di venir costruiti dinamicamente al tentativo di
completamento, piuttosto che essere caricati tutti in una volta.
Per esempio, ponendo che ci sia una libreria di compspec, ognuno
tenuto in un file corrispondente al nome del comando, la seguente funzione
di completamento predefinita caricherebbe i completamenti dinamicamente:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null
2>&1 && return 124
}
complete -D -F _completion_loader -o bashdefault -o
default
Quando l'opzione -o history del comando incorporato
set è abilitata, la shell fornisce l'accesso alla
cronologia dei comandi, la lista dei comandi precedentemente battuti.
Il valore della variabile HISTSIZE è usata come numero
di comandi da salvare nell'elenco della cronologia. Il testo degli
ultimi HISTSIZE comandi (predefinito 500) viene
salvato. La shell immagazzina ogni comando nella lista della cronologia
prima dell'espansione di parametro e di variabile (si veda
ESPANSIONE sopra) ma dopo che è stata effettuata
l'espansione della cronologia, dipendente dai valori delle variabili
di shell HISTIGNORE e
HISTCONTROL.
All'avvio, la cronologia è inizializzata dal file indicato
dalla variabile HISTFILE (predefinita ~/.bash_history).
Il file indicato dal valore di HISTFILE viene
troncato, se necessario, per contenere non più del numero di
righe specificate dal valore di HISTFILESIZE. Se
HISTFILESIZE non è impostata, o impostata a null, a un
valore non numerico o a un valore minore di zero, il file della cronologia
non viene troncato. Quando viene letto il file della cronologia, le righe
che iniziano con un carattere di commento, seguito immediatamente da una
cifra, sono interpretate come marcatura oraria per la riga che segue. Queste
informazioni di data e ora vengono visualizzate opzionalmente a seconda del
valore della variabile HISTTIMEFORMAT. Quando una
shell con la cronologia abilitata esce, le ultime $HISTSIZE
righe vengono copiate dalla lista della cronologia su
$HISTFILE. Se l'opzione di shell histappend
è abilitata (si veda la descrizione di shopt sotto
COMANDI INCORPORATI DELLA SHELL più avanti), le
righe vengono accodate al file della cronologia, in caso contrario il file
della cronologia viene sovrascritto. Se HISTFILE non è
impostato o il file della cronologia è non scrivibile, la
cronologia non viene salvata. Se la variabile HISTTIMEFORMAT
è impostata, le informazioni di data e ora vengono scritte
nel file della cronologia, contrassegnate col carattere di commento della
cronologia, in modo da venir preservate durante le sessioni di shell. Il
carattere di commento viene usato per distinguere le informazioni di data e
ora dalle altre righe. Dopo il salvataggio della cronologia il file della
cronologia è troncato per contenere non più di
HISTFILESIZE righe. Se
HISTFILESIZE non è impostata, o impostata a
null, a un valore non numerico o a un valore numerico minore di zero, il
file della cronologia non viene troncato.
Il comando incorporato fc (si veda COMANDI
INCORPORATI DELLA SHELL più avanti) può essere usato per
elencare o editare e rieseguire una parte della lista della
cronologia. Il comando incorporato history può essere usato
per mostrare o modificare la lista della cronologia e manipolare il file di
cronologia. Quando si usa la modifica della riga di comando, sono
disponibili comandi di ricerca in ciascuna modalità di modifica che
fornisce accesso alla lista della cronologia.
La shell permette il controllo su quali comandi salvare nella
lista della cronologia. Le variabili HISTCONTROL e
HISTIGNORE possono essere definite in modo tale che la
shell salvi solo un sottoinsieme dei comandi immessi. L'opzione di shell
cmdhist, se abilitata, fa sì che la shell tenti di salvare
ogni riga di un comando multiriga nello stesso elemento della cronologia,
aggiungendo dei punti e virgola dove necessario per preservare le
correttezza sintattica. L'opzione di shell lithist chiede alla shell
di salvare i comandi con i codici di fine riga (newline) inclusi invece che
separare i comandi con dei punti e virgola. Si veda la descrizione del
comando incorporato shopt più avanti, sotto COMANDI
INCORPORATI DELLA SHELL per informazioni su come definire e
annullare le opzioni di shell.
La shell ha la capacità di espandere la cronologia in
maniera simile all'espansione della cronologia in csh. Questa sezione
descrive le possibilità di sintassi disponibili. Questa
possibilità è abilitata in modo predefinito per le shell
interattive, e può essere disabilitata usando l'opzione +H del
comando incorporato set (si veda COMANDI INCORPORATI DELLA
SHELL più avanti). Le shell non interattive non
effettuano l'espansione della cronologia come comportamento predefinito.
Le espansioni della cronologia inseriscono parole dall'elenco
della cronologia nel flusso di input, agevolando la ripetizione di comandi,
l'inserimento di argomenti di comandi precedenti nella riga di input
corrente, o la correzione rapida di errori in comandi già
immessi.
L'espansione della cronologia è effettuata immediatamente
dopo che una riga completa è stata letta, prima che la shell la
divida in parole, ed è effettuata su ciascuna riga senza tener conto
delle quotature sulle righe precedenti. Essa ha luogo in due parti. La prima
è per determinare quale riga dall'elenco della cronologia usare
durante la sostituzione. La seconda è per selezionare parti di quella
riga da includere nella riga corrente. La riga selezionata dalla cronologia
è l'evento, e la parte di quella riga su cui si agisce sono le
parole. Diversi modificatori sono disponibili per manipolare
le parole selezionate. La riga è spezzata in parole allo stesso modo
di quando è letta in input, così che più parole
separate da metacaratteri circondate da caratteri di quotatura sono
considerate come una sola parola. Le espansioni della cronologia iniziano
con la comparsa di un carattere di espansione della cronologia, che è
! in modo predefinito. Solo la barra inversa (\) e gli
apostrofi possono quotare il carattere di espansione della cronologia, ma il
carattere di espansione della cronologia è trattato come quotato se
esso precede immediatamente le virgolette di chiusura in una stringa tra
virgolette.
Diversi caratteri inibiscono l'espansione della cronologia quando
trovati immediatamente dopo il carattere di espansione della cronologia,
anche se non quotato: spazio, carattere di tabulazione, newline, carriage
return e =. Se l'opzione di shell estglob è abilitata,
anche ( inibisce l'espansione.
Diverse opzioni di shell impostabili col comando incorporato
shopt possono essere usate per influenzare il comportamento
dell'espansione della cronologia. Se l'opzione di shell histverify
è abilitata (si veda la descrizione del comando incorporato
shopt più avanti), e si sta usando readline, le
sostituzioni della cronologia non vengono passate immediatamente
all'analizzatore della shell. Invece, la riga espansa è ricaricata
nel buffer di modifica di readline per ulteriori modifiche. Se si sta
usando readline ed è abilitata l'opzione di shell
histreedit, una sostituzione di cronologia non completata con
successo viene ricaricata nel buffer di modifica di readline per
essere corretta. L'opzione -p al comando incorporato history
può essere usata per vedere cosa farebbe un'espansione della
cronologia prima di usarla davvero. L'opzione -s del comando
incorporato history può essere usata per aggiungere comandi
alla fine della lista della cronologia senza eseguirli veramente, in modo
che siano disponibili per essere richiamati in un secondo tempo.
La shell permette il controllo dei vari caratteri usati dal
meccanismo di espansione della cronologia (si veda la precedente descrizione
di histchars sotto Variabili di shell). La shell usa il
carattere di commento per contrassegnare le informazioni di data e ora
quando scrive il file della cronologia.
Un designatore di evento è un riferimento a un elemento di
riga di comando nella lista della cronologia. A meno che il riferimento non
sia assoluto, gli eventi sono relativi alla posizione corrente nell'elenco
della cronologia.
- !
- Inizia una sostituzione di cronologia, tranne quando seguita da un
blank, newline, carriage return, = o ( (quando l'opzione di shell
extglob è abilitata usando il comando incorporato
shopt).
- !n
- Designa la riga di comando n.
- !-n
- Designa il comando corrente meno n.
- !!
- Designa il comando precedente. Questo è un sinonimo per `!-1'.
- !stringa
- Designa il comando più recente che precede la posizione corrente
nell'elenco della cronologia che inizia con stringa.
- !?stringa[?]
- Designa il comando più recente che precede la posizione corrente
nell'elenco della cronologia che contiene stringa. Il ?
finale può essere omesso se stringa è seguita
immediatamente da un codice di fine riga (newline). Se stringa
manca, viene usata la stringa dalla ricerca più recente; è
un errore se non ci sono precedenti stringhe di ricerca.
- ^stringa1^stringa2^
- Sostituzione rapida. Ripete il comando precedente, rimpiazzando
stringa1 con stringa2. Equivalente a
“!!:s^stringa1^stringa2^” (si veda
Modificatori più avanti).
- !#
- L'intera riga di comando battuta fino a questo punto.
I designatori di parola sono usati per selezionare parole
dall'evento. Un : separa la specificazione di evento dal designatore
di parola. Esso può essere omesso se il designatore di parola inizia
con un ^, $, *, - o %. Le parole sono
numerate dall'inizio della riga, la prima parola essendo denotata da uno 0
(zero). Le parole sono inserite nella riga corrente separate da spazi
singoli.
- 0 (zero)
- La parola numero zero. Per la shell, questa è la parola che
costituisce il nome del comando.
- n
- La n-esima parola.
- ^
- Il primo argomento. Cioè, la parola 1.
- $
- L'ultima parola. Normalmente questo è l'ultimo argomento, ma si
espanderà alla parola numero zero se c'è una sola parola
nella riga.
- %
- La prima parola che combacia con `?stringa?' nella più
recente ricerca, se la stringa di ricerca inizia con un carattere che
è parte di una parola .
- x-y
- Un intervallo di parole; `-y' abbrevia `0-y'.
- *
- Tutte le parole tranne la numero zero. Questo è un sinonimo per
`1-$'. Non è un errore usare * se vi è solo
una parola nell'evento; in quel caso il risultato è una stringa
vuota.
- x*
- Abbrevia x-$.
- x-
- Abbrevia x-$ come x*, ma omette l'ultima parola. Se manca
x , il valore predefinito è 0.
Se un designatore di parola è fornito senza una
specificazione di evento, il comando precedente viene usato come evento.
Dopo l'opzionale designatore di parola, può comparire una
sequenza di uno o più fra i seguenti modificatori, ognuno preceduto
da un `:'. Questi modificano, o editano, la parola o le parole selezionate
dall'evento di cronologia.
- h
- Rimuove un componente finale in un nome-file, lasciando solo la
testa.
- t
- Rimuove tutti i componenti iniziali in un nome-file, lasciando la
coda.
- r
- Rimuove un suffisso finale della forma .xxx, lasciando il nome base
(basename).
- e
- Rimuove tutto tranne il suffisso finale.
- p
- Stampa il nuovo comando ma non lo esegue.
- q
- Quota le parole sostituite, prevenendo ulteriori sostituzioni.
- x
- Quota le parole sostituite, come con q, ma spezza in parole sui
blank e newline. I modificatori q e x sono
mutualmente esclusivi; viene usato l'ultimo fornito.
- s/vecchio/nuovo/
- Sostituisce nuovo alla prima occorrenza di vecchio nella
riga di evento. Qualsiasi carattere può essere usato come
delimitatore al posto di /. Il delimitatore finale è opzionale se
esso è l'ultimo carattere della riga di evento. Il delimitatore
può essere quotato in vecchio e nuovo con una singola
barra inversa. Se compare & in nuovo, esso è sostituito
da vecchio. Una barra inversa singola quota il carattere &. Se
vecchio è nullo, viene impostato all'ultimo vecchio
sostituito o, se nessuna sostituzione di cronologia è avvenuta,
l'ultima stringa in una ricerca di
!?string[?]. Se nuovo è nullo, ogni
corrispondenza di vecchio viene cancellata.
- &
- Ripete la precedente sostituzione.
- g
- Fa sì che i cambiamenti siano applicati sull'intera riga di evento.
Questo si usa in congiunzione con `:s' (p.es.,
`:gs/vecchio/nuovo/') o
`:&'. Se usato con `:s', qualsiasi delimitatore
può essere usato al posto di /, e il delimitatore finale è
opzionale se è l'ultimo carattere della riga di evento. Un a
può essere usato come sinonimo di g.
- G
- Applica il modificatore che segue `s' o `&' una volta a
ogni parola nella riga di evento.
Se non diversamente indicato, ogni comando incorporato documentato
in questa sezione, il quale accetti opzioni precedute da -, accetta
-- per indicare la fine delle opzioni. I comandi incorporati
:, true, false, e test non accettano opzioni e
non trattano -- in modo speciale. I comandi incorporati exit,
logout, return, break, continue, let e
shift accettano ed elaborano argomenti che iniziano con -
senza richiedere --. Altri comandi incorporati che accettano
argomenti, ma per i quali non viene specificato che accettano opzioni,
interpretano gli argomenti che iniziano con - come opzioni non valide
e richiedono -- per impedire questa interpretazione.
- : [argomenti]
- Nessun effetto; il comando non fa niente, tranne l'espansione degli
argomenti e l'effettuazione di ogni ridirezione specificata. Lo
stato di ritorno è zero.
-
. nome-file [argomenti]
- source
nome-file [argomenti]
- Legge ed esegue comandi dal nome-file nell'ambiente di shell
corrente e ritorna lo stato d'uscita dell'ultimo comando eseguito
contenuto in nome-file. Se nome-file non contiene una barra
[/], i percorsi in PATH sono usati per trovare la directory
contenente nome-file. Il file cercato in PATH
non ha bisogno di essere marcato come eseguibile. Quando
bash non è in modalità posix, viene ricercata
la directory corrente se nessun file viene trovato in PATH.
Se l'opzione sourcepath del comando incorporato shopt
è disattivata, il PATH non viene usato per la
ricerca. Se sono forniti degli argomenti, essi diventano i
parametri posizionali quando nome-file è eseguito.
Altrimenti i parametri posizionali sono inalterati. Se è abilitata
l'opzione -T . eredita tutte le trap in DEBUG; in
caso contrario ogni trap di DEBUG è salvata (prima) e
ripristinata (dopo) la chiamata a ., e . disabilita la trap
DEBUG durante l'esecuzione. Se -T non è abilitato,e
il file eseguito cambia la trap DEBUG, il nuovo valore è
mantenuto quando source completa. Lo stato di ritorno è lo
stato dell'ultimo comando terminato dentro lo script (0 se nessun comando
è eseguito), e falso se nome-file non viene trovato o non
può essere letto.
- alias [-p]
[nome[=valore] ...]
- Alias senza argomenti o con l'opzione -p stampa la lista
degli alias nella forma alias nome=valore sullo
standard output. Quando sono forniti argomenti, viene definito un alias
per ogni nome per cui è dato il valore. Uno spazio
finale a valore fa sì che la parola seguente sia controllata
per la sostituzione di alias quando l'alias è espanso. Per ogni
nome nella lista di argomenti per cui nessun valore è
fornito, è stampato il nome e il valore dell'alias. Alias
ritorna 0 (vero) a meno che non venga dato un nome per il quale
nessun alias è stato definito.
- bg [jobspec
...]
- Riprende ogni job sospeso jobspec in background, come se fosse
stato avviato con &. Se jobspec non è presente,
è usato quello che la shell considera essere il job
corrente. bg jobspec ritorna 0 tranne quando viene
eseguito con il job-control disabilitato o, se eseguito con il job-control
abilitato, se jobspec non è stato trovato o è stato
avviato senza usare job-control.
- bind [-m
keymap] [-lpsvPSVX]
- bind [-m
keymap] [-q funzione] [-u funzione]
[-r keyseq]
- bind [-m
keymap] -f nome-file
- bind [-m
keymap] -x keyseq:comando di shell
- bind [-m
keymap] keyseq:nome-funzione
- bind [-m
mappa-tasti] sequenza-tasti:comando readline
- bind
riga-comando-readline
- Mostra le associazioni attuali di tasti e funzioni di readline,
associa una sequenza di tasti a una funzione o macro di readline o
imposta una variabile readline. Ogni argomento che non sia
un'opzione è un comando come apparirebbe nel file di
inizializzazione di readline .inputrc, ma ciascuna
associazione deve essere passata come argomento separato; per esempio,
'"\C-x\C-r": re-read-init-file'. Le opzioni, se fornite, hanno i
seguenti significati:
- -m keymap
- Usa keymap come mappatura della tastiera da modificare nelle
successive associazioni. I nomi accettabili per keymap sono
emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,
vi-command e vi-insert. vi è equivalente a
vi-command (anche vi-move è un sinonimo) ;
emacs è equivalente a emacs-standard.
- -l
- Elenca i nomi di tutte le funzioni di readline.
- -p
- Mostra i nomi delle funzioni di readline e delle loro associazioni
in modo tale che possano essere riletti.
- -P
- Elenca i nomi delle funzioni di readline correnti e le loro
associazioni.
- -s
- Mostra sequenze di tasti di readline associati a macro e le
stringhe risultanti in modo tale che possano essere rilette.
- -S
- Mostra sequenze di tasti di readline associate a macro e le
stringhe risultanti.
- -v
- Mostra i nomi delle variabili di readline e i loro valori in modo
tale che possano essere riletti.
- -V
- Elenca i nomi delle variabili di readline correnti e i loro
valori.
- -f
nome-file
- Legge le associazioni dei tasti dal file nome-file.
- -q
funzione
- Chiede quali tasti invocano la funzione indicata.
- -u
funzione
- Dissocia tutti i tasti associati alla funzione indicata.
- -r keyseq
- Rimuove qualsiasi associazione corrente per keyseq.
- -x
keyseq:comando di shell
- Provoca l'esecuzione di comando-di-shell ogni volta che viene
immesso keyseq. Quando comando-di-shell viene eseguito, la
shell imposta la variabile READLINE_LINE al contenuto del
buffer di riga readline e le variabili
READLINE_POINT e READLINE_MARK
rispettivamente alla posizione corrente del punto di inserzione e al punto
di inserzione salvato (la marcatura). La shell imposta ogni argomento
numerico fornito dall'utente alla variabile
READLINE_ARGUMENT. Se non c'è l'argomento, la
variabile non è impostata. Se il comando eseguito cambia il valore
di READLINE_LINE, READLINE_POINT
o READLINE_MARK, i nuovi valori saranno portati
nello stato di modifica.
- -X
- Elenca tutte le sequenze di tasti associati a comandi di shell e i comandi
associati in un formato che può essere riusato come input.
Il valore di ritorno è 0 tranne quando si specifica
un'opzione non riconosciuta o è avvenuto un errore.
- break
[n]
- Esce dall'interno di un ciclo for, while, until o
select. Se n è specificato, interrompe n
livelli. n deve essere ≥ 1. Se n è più
grande del numero di cicli racchiusi, tutti i cicli racchiusi vengono
terminati. Il valore di ritorno è 0 tranne quando n non
è maggiore o uguale a 1.
- builtin
comando-incorporato [argomenti]
- Esegue il comando incorporato specificato, passandogli gli
argomenti, e ritorna il suo stato d'uscita. Questo è utile
quando si desidera definire una funzione il cui nome è lo stesso di
un comando incorporato della shell, ottenendo la funzionalità del
comando incorporato attraverso la funzione. Il comando incorporato
cd è comunemente ridefinito in questo modo. Lo stato di
ritorno è falso se comando-incorporato non è un
comando incorporato della shell.
- caller
[espr]
- Restituisce il contesto di qualsiasi chiamata di subroutine attiva (una
funzione di shell o uno script eseguito coi comandi incorporati . o
source. Senza espr, il caller mostra il numero di
riga e il nome di file di origine della chiamata di subroutine corrente.
Se un intero non negativo è fornito come espr, caller
mostra il numero di riga, il nome di subroutine e il file di origine
corrispondente a quella posizione nello stack delle chiamate di
esecuzione. Questa informazione aggiuntiva può essere usata, per
esempio, per stampare una traccia dello stack. Il frame corrente è
il frame 0. Il valore di ritorno è 0 tranne quando la shell non sta
eseguendo una chiamata di subroutine o quando espr non corrisponde
a una posizione valida nello stack delle chiamate.
- cd [-L|[-P
[-e]] [-@]] [dir]
- Cambia la directory corrente con dir. Se dir non viene
indicato, viene usato il valore della variabile HOME. La
variabile CDPATH definisce i percorsi di ricerca per
le directory che contengano dir: ogni nome di directory in
CDPATH viene usato per cercarvi dir. Nomi di
directory alternative in CDPATH sono separati da due
punti (:). Un nome di directory nullo in CDPATH indica
la directory corrente, cioè, “.”. Se
dir inizia con una barra [/], allora CDPATH non
è usato. L'opzione -P dice di usare la struttura di
directory fisica invece di seguire i collegamenti simbolici e prima di
gestire eventuali .. in dir (si veda anche l'opzione
-P del comando incorporato set); l'opzione -L forza a
seguire i collegamenti simbolici risolvendoli dopo aver gestito eventuali
.. in dir. Se .. appare in dir e gestito
rimuovendo il componente del nome percorso subito prima da dir fino
alla barra [/] o all'inizio di dir. Se l'opzione -e viene
fornita con -P, e la directory di lavoro corrente non può
essere determinata con successo dopo un cambiamento di directory andato a
buon fine, cd ritornerà uno stato di insuccesso. Sui sistemi
che la supportano, l'opzione -@ presenta gli attributi estesi
associati a file come se fosse una directory. Un argomento -
è convertito in $OLDPWD prima del cambio directory.
Se viene usato il nome di una directory non vuota da
CDPATH o se - è il primo argomento, e
il cambiamento di directory ha successo, il percorso completo della nuova
directory di lavoro viene scritto sullo standard output. Se il cambio di
directory ha successo, cd imposta il valore della variabile
d'ambiente PWD come il nome della nuova directory, e il valore
della variabile d'ambiente OLDPWD come il nome della directory
corrente prima del cambio. Il valore di ritorno è vero se la
directory è stata cambiata con successo; falso altrimenti.
- command
[-pVv] comando [arg ...]
- Esegue comando con gli argomenti sopprimendo la normale
ricerca tra le funzione di shell. Sono eseguiti solo i comandi incorporati
o comandi trovati in PATH. Se è specificata l'opzione
-p, la ricerca di comando viene effettuata usando un
valore predefinito per PATH usando il quale è
garantito che siano trovate tutte le utilità standard. Se è
fornita l'opzione -V o -v, viene stampata una descrizione di
comando. L'opzione -v provoca la visualizzazione di una
singola parola che indica il comando o il nome-file usato per invocare
comando; l'opzione -V produce una descrizione più
completa. Se è fornita l'opzione -V o -v, lo stato
d'uscita è 0 se comando è stato trovato, e 1
altrimenti. Se nessuna delle due opzioni è fornita e avviene un
errore o comando non può essere trovato, lo stato d'uscita
è 127. Altrimenti, lo stato d'uscita del comando incorporato
command è lo stato d'uscita di comando.
- compgen
[opzione] [parola]
- Genera possibili corrispondenze di completamento per parola in
accordo con le opzioni, che possono essere qualsiasi opzione
accettata dal comando incorporato complete ad eccezione di
-p e -r, e scrive le corrispondenze sullo standard output.
Quando si usano le opzioni -F o -C, le diverse variabili di
shell impostate dai servizi di completamento programmabile, anche se
disponibili, non conterranno valori utili.
Le corrispondenze saranno generate come se il codice di
completamento programmabile le avesse generate direttamente da una
specifica di completamento con gli stessi flag. Se viene specificata
parola, vengono mostrati solo i completamenti disponibili per
parola.
Il valore di ritorno è 0 (vero), tranne quando viene
fornita un'opzione non valida, o non viene generata alcuna
corrispondenza.
- complete
[-abcdefgjksuv] [-o comp-option] [-DEI]
[-A azione] [-G globpat] [-W
lista_di_parole]
-
[-F funzione] [-C comando] [-X
filterpat] [-P prefisso] [-S suffisso]
nome [nome ...]
- complete
-pr [-DEI] [nome ...]
- Specifica come devono essere completati gli argomenti per ogni
nome. Se viene fornita l'opzione -p o se non viene fornita
alcuna opzione, le specifiche di completamento esistenti sono stampate in
modo tale da essere riutilizzabili come input. L'opzione -r rimuove
una specifica di completamento per ogni nome o, se non è
fornito nessun nome, tutte le specifiche di completamento.
L'opzione -D indica che le rimanenti opzioni e azioni si dovrebbero
applicare al completamento di comando “predefinito”;
cioè, il completamento tentato su un comando per il quale non
è stato definito precedentemente nessun completamento. L'opzione
-E indica che le rimanenti opzioni e azioni si dovrebbero applicare
al completamento di comando “vuoto”; cioè il
completamento tentato su una riga vuota. L'opzione -I indica che le
altre opzioni ed azioni fornite vanno applicate al completamento delle
parole iniziali che non siano di assegnamento, o che seguano un
delimitatore di comando come ; o |, che è normalmente
il completamento del comando. Se vengono utilizzate più opzioni,
-D ha la priorità rispetto a -E, ed entrambe hanno la
precedenza rispetto a -I. Se una qualsiasi di -D, -E
o -I viene usata, ogni altro nome viene ignorato; questi
completamenti si applicano solo al caso indicato dall'opzione stessa.
Il processo per applicare queste specifiche di completamento
quando si tenta il completamento della parola è descritto above
under Programmable Completion.
Altre opzioni, se specificate, hanno i seguenti significati.
Gli argomenti alle opzioni -G, -W, e -X (e, se
necessario alle opzioni -P e -S) dovrebbero essere quotati
per proteggerli dall'espansione prima che venga invocato il comando
incorporato complete.
- -o
comp-option
- L'opzione comp-option controlla diversi aspetti del comportamento
di comspec oltre la semplice generazione di completamenti.
comp-option può essere uno di questi:
- bashdefault
- Effettua il resto dei completamenti predefiniti di bash se comspec
non genera corrispondenze.
- default
- Usa il completamento del nome-file predefinito di readline se comspec non
genera corrispondenze.
- dirnames
- Effettua il completamento del nome di directory se comspec non genera
corrispondenze.
- filenames
- Dice a readline che il comspec genera nomi-file, consentendo così
di effettuare qualsiasi elaborazione di uno specifico nome-file (come
aggiungere una barra [/] ai nomi di directory, quotare caratteri speciali
o sopprimere gli spazi finali). Fatto per essere usato con le funzioni di
shell.
- noquote
- Dice a readline di non quotare le parole completate se sono nomi-file (la
quotatura dei nomi-file è il comportamento predefinito).
- nosort
- Dice a readline di non ordinare la lista dei possibili completamenti in
ordine alfabetico.
- nospace
- Dice a readline di non aggiungere uno spazio (che viene aggiunto in modo
predefinito) alle parole completate alla fine della riga.
- plusdirs
- Dopo che le corrispondenze definite da comspec sono state generate, viene
tentato il completamento dei nomi di directory e il risultato viene
aggiunto ai risultati delle altre azioni.
- -A azione
- L'azione può essere una delle seguenti per generare una
lista di possibili completamenti:
- alias
- Nome di alias. Può anche essere specificata come -a.
- arrayvar
- Nomi di variabili di array.
- binding
- Nomi di associazioni di tasti Readline.
- builtin
- Nomi di comandi incorporati della shell. Può anche essere
specificata come -b.
- command
- Nomi di comandi. Può anche essere specificata come -c.
- directory
- Nomi di directory. Può anche essere specificata come
-d.
- disabled
- Nomi di comandi incorporati della shell disabilitati.
- enabled
- Nomi di comandi incorporati della shell abilitati.
- export
- Nomi di variabili di shell esportate. Può anche essere specificata
come -e.
- file
- Nomi di file. Può anche essere specificata come -f.
- function
- Nomi di funzioni di shell.
- group
- Nomi di gruppo. Può anche essere specificata come -g.
- helptopic
- Argomenti di aiuto come accettati dal comando incorporato
help.
- hostname
- Nomi di host, come presi dal file specificato dalla variabile di shell
HOSTFILE.
- job
- Nomi di job, se il job-control è attivo. Può anche essere
specificata come -j.
- keyword
- Parole riservate della shell. Può anche essere specificata come
-k.
- running
- Nomi di job in esecuzione, se il job-control è attivo.
- service
- Nome di servizi. Può anche essere specificata come -s.
- setopt
- Argomenti validi per l'opzione -o del comando incorporato
set.
- shopt
- Nomi di opzioni di shell come accettati dal comando incorporato
shopt.
- signal
- Nomi di segnali.
- stopped
- Nomi di job sospesi, se il job-control è attivo.
- user
- Nomi di utente. Può anche essere specificata come -u.
- variable
- Nomi di variabili di shell. Può anche essere specificata come
-v.
- -C
comando
- comando viene eseguito in un ambiente di subshell, e il suo output
viene usato come lista di possibili completamenti. Gli argomenti sono
passati come per l'opzione -F.
- -F funzione
- La funzione di shell function viene eseguita nell'ambiente di shell
corrente. Quando la funzione è eseguita, il primo argomento
($1) è il nome del comando i cui argomenti devono essere
completati, il secondo argomento ($2) è la parola da
completare, e il terzo argomento ($3) è la parola che
precede la parola da completare sulla riga di comando corrente. Al
termine, i completamenti possibili sono recuperati dal valore della
variabile array COMPREPLY .
- -G
globpat
- Il modello di espansione dei nomi di percorso globpat viene espanso
per generare i possibili completamenti.
- -P
prefisso
- prefisso è aggiunto all'inizio di ogni possibile
completamento dopo che sono state applicate tutte le altre opzioni.
- -S
suffisso
- suffisso è aggiunto alla fine di ogni possibile
completamento dopo che sono state applicate tutte le altre opzioni.
- -W
wordlist
- L'elenco-parole è suddiviso usando i caratteri nella
variabile speciale IFS come delimitatori, e viene espansa
ogni parola risultante. L'utilizzo delle virgolette all'interno di
elenco-parole è gestito, sicché è possibile
utilizzare metacaratteri shell tra le parole, oppure caratteri compresi
anche in IFS. I possibili completamenti sono gli
elementi della lista risultante che sono appropriati per la parola da
completare.
- -X
filterpat
- filterpat è un modello come quelli usati per l'espansione
del nome di percorso. È applicato all'elenco dei possibili
completamenti generati dalle opzioni e dagli argomenti precedenti, e ogni
completamento che corrisponde a filterpat viene rimosso
dall'elenco. Un ! iniziale in filterpat nega il modello; in
questo caso ogni completamento che non concorda con filterpat viene
rimosso.
Il valore di ritorno è 0 (vero) tranne quando viene fornita
un'opzione non valida, viene fornita un'opzione all'infuori di -p o
-r senza un argomento nome, viene fatto un tentativo di
rimuovere una specifica di completamento per un nome per il quale non
vi sono specifiche, o se si verifica un errore aggiungendo una specifica di
completamento.
- compopt
[-o opzione] [-DEI] [+o opzione]
[nome]
- Modifica le opzioni di completamento per ogni nome secondo i valori
di opzione o, se non viene fornito un nome, per il
completamento in esecuzione. Se non viene data nessuna opzione,
visualizza le opzioni di completamento per ogni nome o il
completamento corrente. I possibili valori di opzione sono quelli
validi per il comando incorporato complete descritto
precedentemente. L'opzione -D indica che le opzioni rimanenti
dovrebbero applicarsi al completamento di comando
“predefinito”; cioè il completamento tentato su un
comando per il quale non è stato precedentemente definito un
completamento. L'opzione -E indica che le opzioni rimanenti
dovrebbero applicarsi al completamento di comando “vuoto”;
cioè un completamento tentato su una riga vuota. L'opzione
-I indica che le altre opzioni fornite dovrebbero applicarsi al
completamento della prima parola della riga che non sia un assegnamento,
oppure dopo un delimitatore di comando come ; o |, che
indica normalmente il completamento del nome del comando.
Il valore di ritorno è vero, a meno che non venga
fornita un'opzione non valida, venga fatto un tentativo per modificare
le opzioni per un nome per il quale non esiste alcuna specifica
di completamento, o accada un errore di output.
- continue
[n]
- Riprende la successiva iterazione del ciclo for, while,
until o select dentro cui si trova. Se n è
specificato, riprende all'n-esima nidificazione del ciclo. n
deve essere ≥ 1. Se n è più grande del numero
di cicli nidificati, riprende dall'ultimo ciclo esistente (il ciclo a
più alto livello). Il valore di ritorno è 0 tranne quando
n non è maggiore o uguale a 1.
- declare
[-aAfFgiIlnrtux] [-p] [nome[=valore]
...]
- typeset
[-aAfFgiIlnrtux] [-p] [nome[=valore]
...]
- Dichiara variabili e/o dà loro degli attributi. Se il nome
è omesso, mostra i valori delle variabili. L'opzione -p
mostra gli attributi e i valori di ogni nome. Quando -p
viene usato con argomenti nome, vengono ignorate opzioni
addizionali, eccetto -f e -F. Quando -p viene fornito
senza argomenti nome, visualizza gli attributi e i valori di tutte
le variabili che hanno gli attributi specificati dalle opzioni aggiuntive.
Se non viene fornita nessun'altra opzione con -p, declare
visualizza gli attributi e i valori di tutte le variabili di shell.
L'opzione -f restringe la visualizzazione alle funzioni di shell.
L'opzione -F inibisce la visualizzazione delle definizioni di
funzione; vengono stampati solo il nome della funzione e i suoi attributi.
Se l'opzione di shell extdebug è stata abilitata con
shopt, vengono anche visualizzati il nome di file d'origine e il
numero di riga dov'è definito ciascun nome. L'opzione
-F sottintende -f. L'opzione -g forza la creazione o
la modifica delle variabili globalmente, anche quando declare
è eseguito in una funzione di shell. È ignorato in tutti gli
altri casi. L'opzione -I fa sì che la variabile locale
erediti gli attributi (eccetto nameref) e il valore da una
eventuale variabile con lo stesso nome definita in un scope
precedente. Se non c'è una variabile già esistente, la
variabile locale è inizialmente non impostata. Le seguenti opzioni
possono essere usate per restringere l'output alle sole variabili con gli
attributi specificati o per assegnare attributi di variabili:
- -a
- Ogni nome è una variabile vettore indicizzata (si veda
Array sopra). above).
- -A
- Ogni nome è una variabile vettore associativo (si veda
Vettori sopra). above).
- -f
- Usa solo nomi di funzioni.
- -i
- La variabile è trattata come un intero; la valutazione aritmetica
(si veda VALUTAZIONE ARITMETICA sopra) above)
è effettuata quando alla variabile è assegnato un
valore.
- -l
- Quando alla variabile è assegnato un valore, tutti i caratteri
maiuscoli sono convertiti in minuscolo. L'attributo upper-case è
disabilitato.
- -n
- Dà a ogni nome l'attributo nameref, rendendolo un
riferimento a un'altra variabile. Quest'altra variabile è definita
dal valore di nome. Tutti i riferimenti, gli assegnamenti e le
modifiche degli attributi a nome, tranne quelli che usano o
cambiano lo stesso attributo -n, sono effettuati sulla variabile
referenziata dal valore di nome. L'attributo -n non
può essere applicato alle variabili array.
- -r
- Rende nomi accessibili in sola lettura. A questi nomi non possono
quindi essere assegnati valori da successive istruzioni di assegnamento, e
i valori assegnati non possono essere rimossi.
- -t
- Dà a ogni nome l'attributo trace. Le funzioni
tracciate ereditano i segnali intercettati DEBUG e RETURN
dalla shell chiamante. L'attributo trace non ha un significato speciale
per le variabili.
- -u
- Quando alla variabile è assegnato un valore, tutti i caratteri
minuscoli sono convertiti in maiuscolo. L'attributo lower-case è
disabilitato.
- -x
- Marca nomi per l'esportazione ai successivi comandi attraverso
l'ambiente.
Usare `+' invece di `-' disattiva l'attributo, con l'eccezione che
+a e +A non possono essere usati per eliminare una variabile
array e +r non rimuove l'attributo di sola lettura. Quando usate in
una funzione, declare e typeset rendono ogni nome
locale, come con il comando local, a meno che non venga fornita
l'opzione -g. Se un nome di variabile è seguito da
=valore, il valore della variabile è impostato a
valore. Il valore di ritorno è 0 tranne quando viene
incontrata un'opzione non valida, viene fatto un tentativo di definire una
funzione usando ``-f foo=bar'', un tentativo per assegnare un valore a una
variabile in sola lettura, un tentativo per assegnare un valore a una
variabile vettore senza usare la sintassi di assegnamento composto (si veda
Vettori sopra) above), uno dei nomi non è un nome
valido di variabile di shell, un tentativo per disattivare lo stato di sola
lettura per una variabile in sola lettura, un tentativo per disattivate lo
stato di vettore per una variabile vettore, o un tentativo per mostrare una
funzione non esistente con -f.
- dirs [-clpv]
[+n] [-n]
- Senza opzioni, mostra la lista delle directory correntemente memorizzate.
La visualizzazione predefinita è su un singola riga coi nomi di
directory separate da spazi. Le directory sono aggiunte alla lista con il
comando pushd; il comando popd rimuove elementi dalla lista.
La directory corrente è sempre la prima directory nello stack.
- -c
- Svuota lo stack delle directory cancellando tutti gli elementi.
- -l
- Produce un elenco usando il percorso completo; il formato predefinito per
l'elencazione usa un carattere tilde per indicare la home directory.
- -p
- Stampa lo stack delle directory con un elemento per riga.
- -v
- Stampa lo stack delle directory con un elemento per riga,anteponendo a
ogni elemento il suo indice nello stack.
- +n
- Mostra l'n-esimo elemento contando dalla sinistra della lista
mostrata da dirs quando è chiamato senza opzioni, partendo
da zero.
- -n
- Mostra l'n-esimo elemento contando dalla destra della lista
mostrata da dirs quando è chiamato senza opzioni, partendo
da zero.
Il valore di ritorno è 0 tranne quando viene fornita
un'opzione non valida o n un indice oltre la fine dello stack delle
directory.
- disown [-ar]
[-h] [jobspec ... | pid ... ]
- Senza opzioni, rimuove ogni jobspec dalla tabella dei job attivi.
Se jobspec non è presente, e non viene fornita né
l'opizone -a né l'opzione -r, viene usato il job
corrente. Se viene data l'opzione -h, ogni jobspec non
viene rimosso dalla tabella, ma è marcato in modo che
SIGHUP non venga inviato al job se la shell riceve
un SIGHUP. Se non è specificata alcuna
jobspec l'opzione -a richiede la rimozione o il
marcamento di tutti i job; l'opzione -r senza un argomento
jobspec restringe l'operazione ai job in esecuzione. Il valore di
ritorno è 0 tranne quando jobspec non specifica un job
valido.
- echo [-neE]
[arg ...]
- Emette gli arg, separati da spazi, seguiti da un newline. Lo stato
di ritorno è 0, a meno che non si verifichi un errore di scrittura.
Se è specificato -n, il newline finale è soppresso.
Se è data l'opzione -e, viene abilitata l'interpretazione
dei successivi caratteri preceduti dal carattere di protezione della barra
inversa. L'opzione -E disabilita l'interpretazione di questi
caratteri di protezione, anche su sistemi dove essi sono interpretati in
modo predefinito. L'opzione di shell xpg_echo può essere
usata per determinare dinamicamente se echo espande questi
caratteri di protezione in modo predefinito oppure no. echo non
interpreta -- come fine delle opzioni. echo interpreta le
seguenti sequenze di protezione:
- \a
- avviso (segnale acustico)
- \b
- backspace
- \c
- elimina ulteriore output
- \e
- \E
- un carattere di escape
- \f
- salto pagina
- \n
- codice di fine riga (newline)
- \r
- ritorno carrello
- \t
- tabulazione orizzontale
- \v
- tabulazione verticale
- \\
- barra inversa
- \0nnn
- il carattere a otto bit il cui valore è il valore ottale nnn
(da zero a tre cifre ottali)
- \xHH
- il carattere a otto bit il cui valore è il valore esadecimale
HH (una o due cifre esadecimali)
- \uHHHH
- il carattere Unicode (ISO/IEC 10646) il cui valore è il valore
esadecimale HHHH (da una a quattro cifre esadecimali)
- \UHHHHHHHH
- il carattere Unicode (ISO/IEC 10646) il cui valore è il valore
esadecimale HHHHHHHH (da una a otto cifre esadecimali)
- enable
[-a] [-dnps] [-f nome-file] [nome
...]
- Abilita e disabilita i comandi incorporati della shell. Disabilitare un
comando incorporato permette l'esecuzione di un comando residente su disco
con lo stesso nome di un comando incorporato della shell senza dover
specificare un percorso completo, anche se la shell normalmente cerca i
comandi incorporati prima di quelli su disco. Se è usato -n,
ogni nome è disabilitato; altrimenti, nomi sono
abilitati. Per esempio, per usare il programma binario test trovato
attraverso il PATH, invece della versione
incorporata nella shell, si esegue ``enable -n test''. L'opzione -f
richiede di caricare il nuovo comando incorporato nome dall'oggetto
condiviso nome-file, sui sistemi che supportano il caricamento
dinamico. Bash utilizza il valore della variabile
BASH_LOADABLES_PATH come elenco di percorsi separati dai due punti
per cercare nome-file. Il valore predefinito dipende dal sistema.
L'opzione -d elimina un comando incorporato precedentemente
caricato con -f. Se nessun argomento nome è
specificato, o se viene fornita l'opzione -p viene stampata una
lista di tutti i comandi incorporati della shell. Senza altri argomenti di
opzione la lista è formata da tutti i comandi incorporati della
shell abilitati. Se è fornito -n, vengono stampati solo i
comandi incorporati disabilitati. Se è fornito -a, la lista
stampata include tutti i comandi incorporati, con l'indicazione per
ciascuno se è abilitato o no. Se viene fornito -s, l'output
è ristretto ai comandi incorporati speciali POSIX. Se non
vengono fornite opzioni e nome non è un comando incorporato,
allora enable cercherà di caricare nome da una
libreria condivisa chiamata nome, come il comando fosse ``enable -f
name name . Il valore restituito è 0 a meno che nome
sia un comando incorporato della shell o ci sia un errore caricandone uno
nuovo da una libreria condivisa.
- eval [arg
...]
- Gli arg sono letti e concatenati insieme formando un singolo
comando. Questo comando è quindi letto ed eseguito dalla shell, e
il suo stato di uscita è ritornato come valore del comando
eval. Se non vi è alcun arg, o vi sono solo argomenti
nulli, eval ritorna 0.
- exec [-cl]
[-a nome] [comando [argomenti]]
- Se comando è specificato, esso sostituisce la shell. Nessun
nuovo processo viene creato. Gli argomenti diventano gli argomenti
per comando. Se viene fornita l'opzione -l la shell pone un
trattino all'inizio dell'argomento numero zero passato a comando.
Questo è quello che fa login(1). L'opzione -c provoca
l'esecuzione di comando con un ambiente vuoto. Se viene fornita
-a la shell passa nome come argomento numero zero del
comando eseguito. Se comando non può essere eseguito per
qualche ragione, una shell non interattiva termina, a meno che non sia
abilitata l'opzione di shell execfail, nel qual caso restituisce
insuccesso. Una shell interattiva restituisce insuccesso se il file non
può essere eseguito. Una subshell esce incondizionatamente se
exec fallisce. Se comando non è specificato,
qualsiasi ridirezione ha effetto nella shell corrente, e lo stato di
ritorno è 0. Se si verifica un errore di ridirezione lo stato di
ritorno è 1.
- exit
[n]
- Causa l'uscita della shell con uno stato d'uscita n. Se n
è omesso, lo stato d'uscita è quello dell'ultimo comando
eseguito. Un'intercettazione di segnale su EXIT è
eseguita prima che la shell termini.
- export
[-fn] [nome[=parola]] ...
- export
-p
- I nomi forniti sono marcati per l'esportazione automatica
nell'ambiente dei comandi eseguiti in seguito. Se è specificata l'
opzione -f, i nomi si riferiscono a funzioni. Se il
nome è omesso o se se è fornita l'opzione -p,
viene stampata una lista di nomi di tutte le variabili esportate.
L'opzione -n provoca la rimozione della proprietà di
esportazione da ogni nome. Se un nome di variabile è seguito
da =parola, il valore della variabile è impostato a
parola. export ritorna uno stato d'uscita di 0 tranne quando
viene trovata un'opzione non valida, uno dei nomi non è un
nome valido di variabile di shell, o viene fornita l'opzione -f con
un nome che non è il nome di una funzione.
- fc [-e
nome-editor] [-lnr] [primo] [ultimo]
- fc -s
[pat=rep] [cmd]
- Nella prima forma, seleziona un intervallo di comandi fra primo e
ultimo dalla lista della cronologia e li mostra o li modifica e li
riesegue . Primo e ultimo possono essere specificati come
una stringa (per individuare l'ultimo comando che inizia con quella
stringa) o come numero (un indice nella lista della cronologia, dove un
numero negativo è usato a partire dal numero del comando corrente).
Quando si elenca, un primo o ultimo pari a 0 è
equivalente a -1, e -0 è equivalente al comando corrente
(normalmente il comando fc); altrimenti 0 è equivalente a -1
e -0 non è valido. Se ultimo non è specificato
è impostato al comando corrente per l'elencazione (così che
``fc -l -10'' stampa gli ultimi 10 comandi) e a primo altrimenti.
Se primo non è specificato è impostato al precedente
comando per la modifica e a -16 per l'elencazione.
L'opzione -n sopprime i numeri dei comandi quando li
elenca. L'opzione -r inverte l'ordine dei comandi. Se è
specificata l'opzione -l, i comandi sono elencati sullo standard
output. Altrimenti, è invocato l'editor indicato da ename
su un file che contiene questi comandi. Se ename è omesso,
è usato il valore della variabile FCEDIT, e il
valore di EDITOR se FCEDIT
non è impostata. Se né l'una né l'altra
variabile è impostata, è usato vi Quando la
modifica è completata, i comandi modificati sono listati ed
eseguiti.
Nella seconda forma, comando è rieseguito dopo
che ogni istanza di pat è sostituita da rep.
Comando è interpretato come primo.Un utile alias da
usare con questo è ``r="fc -s"'', così che
digitando ``r cc'' si esegue l'ultimo comando che inizia con ``cc'' e
battendo ``r'' si riesegue l'ultimo comando.
Se è usata la prima forma, il valore di ritorno
è 0 a meno che sia incontrata un'opzione non valida o
primo o ultimo specifichino righe di cronologia fuori
dall'intervallo esistente. Se è fornita l'opzione -e, il
valore di ritorno è il valore dell'ultimo comando eseguito, o
insuccesso se avviene un errore con il file temporaneo dei comandi. Se
è usata la seconda forma, lo stato di ritorno è quello del
comando rieseguito, tranne quando cmd non specifica una riga di
cronologia valida, nel qual caso fc ritorna insuccesso.
- fg
[jobspec]
- Riprende jobspec in primo piano, e lo rende il job corrente. Se
jobspec non è presente, è usata la nozione della
shell di job corrente. Il valore di ritorno è quello del
comando posto in primo piano, o insuccesso se eseguito mentre il
job-control è disabilitato o, quando eseguito col job-control
abilitato, se jobspec non specifica un job valido o jobspec
specifica un job che era stato avviato senza job-control.
- getopts
optstring nome [arg ...]
- getopts è usato dalle procedure di shell per analizzare i
parametri posizionali. optstring contiene i caratteri delle opzioni
che devono essere riconosciuti; se un carattere è seguito da due
punti, l'opzione si aspetta di avere un argomento, che dovrà essere
separato dalla stessa da spazi bianchi. I due punti e il punto
interrogativo non possono essere usati come caratteri di opzione. Ogni
volta che è invocato, getopts pone la successiva opzione
nella variabile di shell nome, inizializzando nome se non
esiste, e l'indice del prossimo argomento da elaborare nella variabile
OPTIND. OPTIND è inizializzato
a 1 ogni volta che la shell o uno script di shell viene invocato.
Quando un'opzione richiede un argomento, getopts pone
quell'argomento nella variabile OPTARG. La shell non
reimposta OPTIND automaticamente; questa
variabile deve essere manualmente reimpostata tra più chiamate a
getopts dentro la stessa esecuzione della shell, se deve essere
usato un nuovo insieme di parametri.
Quando viene raggiunta la fine delle opzioni getopts
esce con un valore di ritorno maggiore di zero. OPTIND
è impostato all'indice del primo argomento senza opzioni
e nome viene impostato a ?.
getopts normalmente analizza i parametri posizionali,
ma se più argomenti vengono dati come valori arg,
getopts analizza solo quelli.
getopts può informare degli errori in due modi.
Se il primo carattere di optstring è un due punti,
è usata un'informazione di errore silenziosa. Normalmente
i messaggi diagnostici vengono stampati quando vengono trovate opzioni
non valide o mancano argomenti alle opzioni. Se la variabile
OPTERR è impostata a 0, nessun messaggio di errore
viene mostrato, anche se il primo carattere di optstring
non è due punti.
Se è incontrata un'opzione non valida, getopts
pone ? nel nome e, se non silenziosa, stampa un messaggio di
errore e annulla OPTARG. Se getopts
è silenziosa, il carattere di opzione trovato è posto in
OPTARG e nessun messaggio diagnostico è
stampato.
Se un argomento richiesto non è trovato, e
getopts non è silenziosa, un punto interrogativo
(?) è posto in nome, OPTARG
viene annullato, e viene stampato un messaggio diagnostico. Se
getopts è silenziosa, allora un carattere di due punti
(:) è posto in nome e OPTARG è
impostato al carattere di opzione trovato.
getopts ritorna 0 (vero) se viene trovata un'opzione,
specificata o non specificata. Ritorna falso se viene incontrata la fine
delle opzioni o avviene un errore.
- hash [-lr]
[-p nome-file] [-dt] [nome]
- Ogni volta che hash viene invocata, il percorso completo del
comando nome è determinato ricercando le directory in
$PATH e viene memorizzato. Ogni nome di percorso precedentemente
memorizzato viene perso. Se viene fornita l'opzione -p, non viene
effettuata nessuna ricerca di percorso e nome-file è usato
come nome completo del comando. L'opzione -r fa sì che la
shell dimentichi tutti i percorsi memorizzati. L'opzione -d fa
sì che la shell dimentichi i percorsi memorizzati di ogni
nome. Se viene fornita l'opzione -t è stampato il
percorso completo al quale corrisponde ogni nome. Se vengono
forniti argomenti multipli di nome con -t, il nome
viene stampato prima del percorso completo indicizzato. L'opzione
-l provoca la visualizzazione dell'output in un formato
riutilizzabile come input. Se nessun argomento è dato, ed è
fornito solo -l, è stampata l'informazione circa i comandi
memorizzati. Lo stato di ritorno è 0 (vero) tranne quando
nome è irreperibile o viene fornita un'opzione non
valida.
- help [-dms]
[modello]
- Mostra utili informazioni sui i comandi incorporati. Se modello
è specificato, help fornisce un aiuto dettagliato su tutti i
comandi che corrispondono al modello; altrimenti è stampato
l'aiuto per tutti i comandi incorporati e le strutture di controllo della
shell.
- -d
- Visualizza una breve descrizione di ogni modello
- -m
- Visualizza la descrizione di ogni modello in un formato simile a
manpage
- -s
- Visualizza solo una breve sintassi d'uso per ogni modello
Lo stato di ritorno è 0 tranne quando nessun comando
è individuato dal modello.
- history
[n]
- history
-c
- history -d
scostamento
- history -d
iniziofine
- history
-anrw [nome-file]
- history
-p arg [arg ...]
- history
-s arg [arg ...]
- Senza opzioni, mostra la lista della cronologia dei comandi con i numeri
di riga. Le righe elencate con un * sono state modificate. Con
l'argomento n elenca solo le ultime n righe. Se la variabile
di shell HISTTIMEFORMAT è impostata e non nulla,
è usata come stringa di formato di strftime(3) per
mostrare la data/ora associata a ogni elemento della cronologia. Nessuno
spazio è interposto fra la data/ora formattata e la riga della
cronologia. Se è fornito nome-file, questo è usato
come nome del file di cronologia; altrimenti, è usato il valore di
HISTFILE. Le opzioni, se fornite, hanno i seguenti
significati:
- -c
- Svuota l'elenco della cronologia eliminando tutti gli elementi.
- -d
scostamento
- Cancella l'elemento dalla cronologia alla posizione scostamento. Se
scostamento è negativo viene interpretato come uno maggiore
dell'ultima posizione della cronologia, quindi gli indici negativi partono
dalla fine della cronologia e un indice -1 si riferisce al comando attuale
history -d.
- -d
inizio-fine
- Cancella gli elementi della cronologia tra le posizioni inizio e
fine, incluse. Valori positivi e negativi per inizio e
fine sono interpretati come descritto in precedenza.
- -a
- Accoda le “nuove” righe al file della cronologia. Queste
sono righe della cronologia inserite dall'inizio della corrente sessione
di bash, ma non ancora aggiunte al file di cronologia.
- -n
- Inserisce le righe della cronologia non ancora lette dal file di
cronologia nella corrente lista della cronologia. Queste sono le righe
accodate al file di cronologia dall'inizio della corrente sessione di
bash.
- -r
- Legge il contenuto del file di cronologia e lo aggiunge alla fine della
cronologia corrente.
- -w
- Scrive la cronologia corrente sul file di cronologia, sovrascrivendo il
contenuto del file di cronologia.
- -p
- Effettua la sostituzione della cronologia sui seguenti arg e mostra
il risultato sullo standard output. Non conserva il risultato nell'elenco
della cronologia. Ogni arg dev'essere quotato per disabilitare la
normale espansione della cronologia.
- -s
- Memorizza gli arg nell'elenco della cronologia come un singolo
comando. L'ultimo comando nell'elenco della cronologia viene rimosso prima
che gli arg vengano aggiunti.
Se la variabile HISTTIMEFORMAT è impostata,
l'informazione data/ora associata a ogni elemento della cronologia
viene scritta nel file della cronologia, marcato col carattere di commento.
Quando viene letto il file della cronologia, le righe che iniziano con il
carattere di commento seguito immediatamente da una cifra sono interpretate
come data e ora della voce di cronologia successiva. Il valore di ritorno
è 0 tranne quando viene incontrata un'opzione non valida, avviene un
errore mentre si legge o si scrive il file della cronologia, viene fornito
uno scostamento non valido come argomento a -d o l'espansione
della cronologia fornita come argomento a -p non ha successo.
- jobs [-lnprs] [
jobspec ... ]
- jobs -x
comando [ args ... ]
- La prima forma elenca i job attivi. Le opzioni hanno i seguenti
significati:
- -l
- Elenca gli ID dei processi in aggiunta alle normali informazioni.
- -n
- Mostra le informazioni solo sui job che hanno cambiato stato dall'ultima
notifica di stato mostrata all'utente.
- -p
- Elenca solo l'ID di processo del principale job del gruppo di
processo.
- -r
- Mostra solo i job in esecuzione.
- -s
- Mostra solo i job sospesi.
Se jobspec è specificato, l'output è limitato
alle informazioni su quel job. Lo stato di ritorno è 0 a meno che
venga incontrata un'opzione non valida o sia fornito un jobspec non
valido.
Se è fornita l'opzione -x, jobs sostituisce
qualsiasi jobspec trovato in comando o args con il
corrispondente ID del gruppo di processo, ed esegue comando
passandogli args, e ritornando il suo stato d'uscita.
- kill [-s
sigspec | -n signum | -sigspec]
[pid | jobspec] ...
- kill
-l|-L [sigspec | exit_status]
- Manda il segnale indicato da sigspec o signum al processo
indicato da pid o jobspec. sigspec è o un nome
di segnale, senza distinzione tra maiuscole e minuscole, come
SIGKILL, (con o senza il prefisso SIG)
o un numero di segnale; signum è un numero di segnale.
Se sigspec non è presente, si suppone essere
SIGTERM. Un argomento -l elenca i nomi dei
segnali. Se sono forniti degli argomenti quando è specificata
l'opzione -l, sono elencati i nomi dei segnali corrispondenti agli
argomenti, e lo stato di ritorno è 0. L'argomento stato
d'uscita di -l è un numero che specifica o un numero di
segnale o lo stato d'uscita di un processo terminato da un segnale.
L'opzione -L è equivalente a -l. kill
restituisce 0 (vero) se almeno un segnale è stato inviato con
successo, o falso se avviene un errore o se è incontrata un'opzione
non valida.
- let arg
[arg ...]
- Ogni arg è un'espressione aritmetica che deve essere
valutata (si veda VALUTAZIONE ARITMETICA sopra)
above). Se l'ultimo arg viene valutato 0, let ritorna 1;
altrimenti è ritornato 0.
- local
[opzione] [nome[=valore] ... | - ]
- Per ogni argomento viene creata una variabile locale chiamata nome
e le viene assegnato valore. L'opzione può essere una
qualunque di quelle accettate da declare. Quando local
è usato dentro una funzione, fa sì che la variabile
nome abbia una visibilità ristretta a quella funzione e ai
suoi figli. Se nome è -, l'insieme delle opzioni di shell
è reso locale alla funzione nella quale local è
chiamato: le opzioni di shell cambiate con il comando incorporato
set all'interno della funzione saranno ripristinate ai loro valori
originari quando la funzione ritorna. Il ripristino viene effettuato come
se si eseguisse il comando set per ripristinare i valori che erano
presenti prima dell'invocazione della funzione. Senza alcun operando,
local scrive una lista di variabili locali sullo standard output.
È un errore usare local quando non si è dentro una
funzione. Lo stato di ritorno è 0 tranne quando local
è usata fuori da una funzione, viene fornito un nome non
valido o nome è una variabile in sola lettura.
- logout
- Termina una shell di login.
- mapfile
[-d delim] [-n numero] [-O
origine] [-s numero] [-t] [-u fd]
[-C callback] [-c quantum]
[array]
- readarray
[-d delim] [-n numero] [-O
origine] [-s numero] [-t] [-u fd]
[-C callback] [-c quantum]
[array]
- Legge righe dallo standard input all'interno della variabile array
indicizzata array, o dal descrittore di file fd se viene
fornita l'opzione -u. La variabile MAPFILE è
l'array predefinito. Le opzioni, se fornite, hanno il
seguente significato:
- -d
- Il primo carattere di delim è usato per far terminare la
riga di input, invece di newline. Se delim è la stringa
vuota, mapfile terminerà una riga quando leggerà il
carattere NUL.
- -n
- Copia al massimo numero righe. Se numero è 0 vengono
copiate tutte le righe.
- -O
- Inizia assegnando array all'indice origine. L'indice
predefinito è 0.
- -s
- Ignora le prime numero righe lette.
- -t
- Rimuove il delimitatore (il predefinito è
"newline") finale da ogni riga letta.
- -u
- Legge le righe dal descrittore di file fd invece che dallo standard
input.
- -C
- Valuta callback ogni volta che vengono lette quantum righe.
L'opzione -c specifica quantum.
- -c
- Specifica il numero di righe lette tra una chiamata e l'altra di
callback.
Se -C è specificato senza -c, il quantum
predefinito è 5000. Quando callback è valutato, viene
fornito l'indice del successivo elemento di array da assegnare e la riga da
attribuire a quell'elemento come argomenti aggiuntivi. callback viene
valutato dopo che la riga è stata letta, ma prima che l'elemento di
array sia stato assegnato.
Se non è fornito con un'origine esplicita, mapfile
azzera array prima della relativa assegnazione.
mapfile ritorna successo, a meno che non vengano forniti
un'opzione o un argomento di opzione non validi, array sia non valido
o non assegnabile, oppure se array non è un array
indicizzato.
- popd [-n]
[+n] [-n]
- Rimuove degli elementi dallo stack delle directory. Gli elementi sono
numerati a partire da 0 e seguono l'ordine della loro elencazione come nel
comando dirs. Senza argomenti, rimuove la directory in cima allo
stack, ed effettua un cd verso la nuova directory in cima allo
stack. Gli argomenti, se forniti, hanno il seguente significato:
- -n
- Sopprime il normale cambiamento di directory quando rimuove directory
dallo stack, ossia viene manipolato solo lo stack.
- +n
- Rimuove l'n-esimo elemento contando dalla sinistra della lista
mostrata da dirs, partendo da zero, dallo stack. Per esempio:
``popd +0'' rimuove la prima directory, ``popd +1'' la seconda.
- -n
- Rimuove l'n-esimo elemento contando dalla destra della lista
mostrata da dirs, partendo da zero. Per esempio: ``popd -0''
Rimuove l'ultima directory, ``popd -1'' la penultima.
Se l'elemento in cima allo stack delle directory è
modificato e viene usata l'opzione -n, popd usa il comando
incorporato cd per spostarsi sulla directory in cima allo stack. Se
cd fallisce, popd restituisce un valore non zero.
Altrimenti popd ritorna falso se viene incontrata
un'opzione non valida, se lo stack delle directory è vuoto, o se
è specificato un elemento non esistente nello stack delle
directory.
Se il comando popd ha successo, bash esegue dirs per
mostrare il contenuto finale dello stack delle directory, e ritorna con
stato 0.
- printf [-v
var] formato [argomenti]
- Scrive gli argomenti formattati sullo standard output sotto il
controllo del formato. Con l'opzione -v l'output viene
assegnato alla variabile var piuttosto che essere stampato sullo
standard output.
Il formato è una stringa di caratteri che
contiene tre tipi di oggetti: caratteri semplici, i quali sono
semplicemente copiati sullo standard output, sequenze di protezione dei
caratteri, che sono convertite e copiate sullo standard output, e
specifiche di formato, ognuna delle quali provoca la stampa
dell'argomento seguente. Oltre alle specifiche di formato
printf(1) standard, printf interpreta le seguenti
estensioni:
- %b
- fa sì che printf espanda sequenze di protezione tramite la
barra inversa nell'argomento corrispondente nello stesso modo di
echo -e.
- %q
- fa sì che printf stampi sull'output l'argomento
corrispondente in un formato riutilizzabile come input di shell.
- %Q
- come %q, ma applica l'eventuale precisione fornita
all'argomento prima di quotarlo.
- %(datefmt)T
- fa sì che printf stampi sull'output la stringa data-ora che
risulta dall'uso di datefmt come stringa di formato per
strftime(3). L'argomento corrispondente è un numero
intero che rappresenta il numero di secondi trascorso dall'epoca. Possono
essere usati due valori di argomento speciali: -1 rappresenta il tempo
attuale e -2 rappresenta il tempo in cui la shell è stata invocata.
Se non viene indicato nessun argomento, il comportamento è lo
stesso che con l'argomento -1. Questa è un'eccezione rispetto al
comportamento normale di printf.
Tutte le direttive %b, %q e %T usano gli argomenti per la
larghezza del campo e la precisione dalla specifica di formato e scrivono
esattamente quei byte (o usano comunque quello spazio) per l'argomento
espanso, che normalmente conterrebbe più caratteri
dell'originale.
Argomenti alle specifiche di formato non stringa sono trattati
come costanti C, con l'eccezione che un segno meno o più iniziale
è permesso, e che se il carattere iniziale coincide con un apostrofo
o con delle virgolette, il valore è quello ASCII del carattere che
segue.
Il formato è riutilizzato più volte fino
all'esaurimento degli argomenti. Se il formato richiede
più argomenti di quelli forniti, le specifiche di formato
extra si comportano come se fosse stato fornito, a seconda del caso, il
valore zero o una stringa nulla. Il valore di ritorno è 0 in caso di
successo, diverso da zero in caso di insuccesso.
- pushd [-n]
[+n] [-n]
- pushd [-n]
[dir]
- Aggiunge una directory in cima allo stack delle directory, o ruota lo
stack, rendendo la nuova cima dello stack la corrente directory di lavoro.
Senza argomenti, pushd scambia le due directory in cima e ritorna
0. Gli argomenti, se forniti, hanno il seguente significato:
- -n
- Sopprime il normale cambio di directory quando si ruotano o si aggiungono
directory allo stack, cosicché viene manipolato solo lo stack.
- +n
- Ruota lo stack così che la n-esima directory (contando dalla
sinistra della lista mostrata da dirs, partendo da zero) vada in
cima.
- -n
- Ruota lo stack così che la n-esima directory (contando da
destra della lista mostrata da dirs, partendo da zero) vada in
cima.
- dir
- Aggiunge dir sulla cima dello stack delle directory
Dopo che lo stack è stato modificato, se non è stata
fornita l'opzione -n, pushd usa il comando incorporato
cd per spostarsi sulla directory che sta in cima allo stack. Se
cd fallisce, pushd restituisce un valore diverso da zero.
Altrimenti, se non sono forniti argomenti, pushd ritorna 0
tranne quando lo stack delle directory è vuoto. Quanto ruota lo stack
delle directory pushd restituisce 0 a meno che lo stack stesso sia
vuoto o se è indicato un elemento non esistente dello stack.
Se il comando pushd ha successo, bash esegue dirs
per mostrare il contenuto finale dello stack delle directory.
- pwd [-LP]
- Stampa il percorso assoluto della corrente directory di lavoro. Il
percorso stampato non contiene alcun collegamento simbolico se è
fornita l'opzione -P o l'opzione -o physical al comando
incorporato set è abilitata. Se viene usata l'opzione
-L il percorso stampato può contenere collegamenti
simbolici. Lo stato di ritorno è 0 tranne quando avviene un errore
mentre si legge il percorso della directory corrente o viene fornita
un'opzione non valida.
- read [-ers]
[-a aname] [-d delim] [-i testo]
[-n nchars] [-N nchars] [-p
prompt] [-t tempo_limite] [-u fd]
[nome ...]
- Una riga viene letta dallo standard input, o dal descrittore di file
fd fornito come argomento dell'opzione -u, e spezzata in
parole come descritto above in Word Splitting, e la prima parola
è assegnata al primo nome, la seconda parola al secondo
nome, e così via, e le parole rimaste, compresi i
separatori, sono assegnate all'ultimo nome. Se ci sono meno parole
lette dalla riga di input che nomi, ai nomi rimanenti vengono assegnati
valori nulli. I caratteri in IFS sono usati per suddividere
la riga in parole usando le stesse regole che la shell usa per
l'espansione (descritta above in Word Splitting). Il carattere
barra inversa (\) può essere usato per rimuove il
significato speciale al successivo carattere letto, o per la continuazione
della riga. Le opzioni, se fornite, hanno il seguente significato:
- -a aname
- Le parole sono assegnate a indici sequenziali della variabile array
aname, partendo da 0. aname viene annullata prima
dell'assegnamento dei nuovi valori. Altri argomenti nome vengono
ignorati.
- -d delim
- Il primo carattere di delim è usato per far terminare la
riga di input, invece di newline. Se delim è la stringa
vuota, read terminerà una riga quando incontra il carattere
NUL.
- -e
- Se lo standard input è collegato ad un terminale, readline
(vedere READLINE above) è usato per ottenere
la riga. Readline usa le impostazioni correnti per la modifica (o
predefinite, se la modifica di riga non era precedentemente attiva), ma
usa il completamento del nome-file predefinito di Readline.
- -i testo
- Se readline è in uso per leggere la riga, testo viene
messo nel buffer di modifica prima che inizi la correzione.
- -n
nchars
- read è considerata completata dopo aver letto nchars
caratteri invece di aspettare una riga di input completa, ma rispetta un
delimitatore se prima del delimitatore sono letti meno di nchars
caratteri.
- -N nchars
- read è considerata completata dopo aver letto esattamente
nchars caratteri invece di aspettare una riga di input completa, a
meno che non sia stato trovato un EOF o read sia fuori tempo
massimo. I caratteri di delimitazione nell'input non vengono trattati in
modo speciale e non provocano il completamento di read
finché non vengono letti nchars caratteri. Il risultato non
è spezzato dai caratteri in IFS; l'intento è che alla
variabile siano assegnati esattamente quel numero di caratteri letti (con
l'eccezione della barra inversa []; vedi l'opzione -r più
avanti).
- -p prompt
- Visualizza prompt sullo standard error, senza un newline finale,
prima di tentare di leggere qualsiasi input. Il prompt è mostrato
solo se l'input proviene da un terminale.
- -r
- La barra inversa non fa da carattere di protezione. La barra inversa
è considerata come parte della riga. In particolare, una coppia
barra_inversa-newline non può essere usata poi come una
continuazione di riga.
- -s
- Modalità silenziosa. Se l'input viene da un terminale i caratteri
immessi non vengono visualizzati sul terminale.
- -t
tempo_limite
- Fa sì che read vada fuori tempo massimo e ritorni insuccesso
se un riga completa di input (o il numero di caratteri specificato) non
viene letta entro tempo_limite secondi. tempo_limite
può essere un numero decimale con una parte frazionaria dopo il
separatore decimale. Quest'opzione produce effetti solo se read sta
leggendo l'input da un terminale, da una pipe o da un altro file speciale;
non produce effetti quando legge da file regolari. Se read
raggiunge il tempo massimo, salva quanto letto nella variabile
nome. Se tempo_limite è 0, read ritorna
successo se l'input è disponibile nel descrittore di file
specificato, insuccesso altrimenti. Lo stato d'uscita è maggiore di
128 se viene superato il limite di tempo.
- -u fd
- Legge l'input dal descrittore di file fd.
Se non sono forniti nomi la riga letta, dalla quale viene
rimosso il delimitatore finale, viene assegnata alla variabile
REPLY. Lo stato d'uscita è 0, tranne quando
viene raggiunta la fine del file, read esaurisce il tempo limite
consentito (nel qual caso lo stato d'uscita è maggiore di 128), se
c'è un problema nell'assegnamento a variabile (come quando si usa un
nome di variabile in sola lettura), o viene fornito un descrittore di file
non valido come argomento a -u.
- readonly
[-aAf] [-p] [nome[=parola] ...]
- I nomi dati sono da considerare in sola lettura; i valori di questi
nomi non possono essere cambiati dagli assegnamenti successivi. Se
è fornita l'opzione -f, sono così marcate le funzioni
corrispondenti ai nomi. L'opzione -a restringe le variabili
agli array indicizzati; l'opzione -A restringe le variabili agli
array associativi. Se vengono fornite entrambe le opzioni, -A ha la
precedenza. Se nessun argomento nome è dato, o se è
fornita l'opzione -p, viene stampata una lista di tutti i nomi in
sola lettura. Le altre opzioni possono essere usate per restringere
l'output a una sotto-serie della serie di nomi in sola lettura. L'opzione
-p provoca la visualizzazione dell'output in un formato
riutilizzabile come input. Se un nome di variabile è seguito da
=parola il valore della variabile è impostato a
parola. Lo stato di ritorno è 0 tranne quando è
incontrata un'opzione non valida, uno dei nomi non è un nome
di variabile di shell valido, o viene fornita l'opzione -f con un
nome che non è una funzione.
- return
[n]
- Fa sì che una funzione termini l'esecuzione e torni al chiamante
con il valore di ritorno specificato da n. Se n è
omesso, lo stato di ritorno è quello dell'ultimo comando eseguito
nel corpo della funzione. Se return è eseguito nella
gestione di un segnale, l'ultimo comando usato per determinare lo stato di
uscita è quello precedente alla gestione del segnale. Se
return è eseguito all'interno della gestione del segnale
DEBUG, l'ultimo comando è quello eseguito all'interno della
gestione del segnale prima dell'invocazione di return. Se
return è usato fuori da una funzione, ma durante
l'esecuzione di uno script tramite il comando . (source), fa
sì che la shell smetta di eseguire quello script e ritorni o
n o lo stato d'uscita dell'ultimo comando eseguito dentro lo script
come stato d'uscita dello script. Se viene fornito n, il valore di
ritorno è composta dai suoi 8 bit meno significativi. Lo stato
restituito è diverso da zero se a return viene fornito un
valore non numerico o se usato fuori da una funzione e non durante
l'esecuzione di uno script per mezzo di . or source.
Qualsiasi comando associato alla gestione del segnale RETURN viene
eseguito prima che l'esecuzione riprenda dopo la funzione o script.
- set
[-abefhkmnptuvxBCEHPT] [-o opzione-nome] [--]
[-] [arg ...]
- set
[+abefhkmnptuvxBCEHPT] [+o opzione-nome] [--]
[-] [arg ...]
- Senza opzioni, il nome e il valore di ogni variabile di shell vengono
visualizzati in un formato riutilizzabile come input per impostare o
reimpostare le variabili attualmente impostate. Le variabili in sola
lettura non possono essere reimpostate. In modalità posix
sono elencate solo le variabili di shell. L'output è ordinato in
base alla localizzazione corrente. Quando sono specificate opzioni, queste
impostano o annullano attributi di shell. Gli argomenti che rimangono
eventualmente dopo che le opzioni sono state elaborate sono trattati come
valori per i parametri posizionali e vengono assegnati, nell'ordine, a
$1, $2, ... $n. Le opzioni, se
specificate, hanno i seguenti significati:
- -a
- A ogni variabile o funzione che è creata o modificata viene dato
l'attributo export e marcata come da esportare verso l'ambiente dei
comandi successivi.
- -b
- Riporta immediatamente lo stato dei job in background terminati, invece
che prima di stampare il prossimo prompt primario. Questo è
applicabile solo quando è abilitato il job-control.
- -e
- Termina immediatamente se una pipeline (che può consistere
di un solo comando semplice), una lista, on un comando
composto (vedi GRAMMATICA DELLA SHELL sopra)
above), termina con uno stato diverso da zero. La shell non esce se il
comando che non ha successo fa parte di un elenco di comandi che segue
subito dopo una parola chiave while o until, se fa parte di
un controllo che segue le parole riservate if o elif, se fa
parte di qualsiasi comando eseguito in una lista && o
|| tranne il comando che segue && o ||
finali, o di qualsiasi comando in una pipeline escluso l'ultimo, o se il
valore di ritorno del comando è stato negato con !. Se un
comando composto oltre che una subshell restituisce uno stato diverso da
zero perché un comando non è andato a buon fine mentre
-e veniva ignorato, la shell non esce. Un comando sul segnale
intercettato ERR, se impostato, è eseguito prima dell'uscita
della shell. Questa opzione si applica all'ambiente di shell e a ogni
ambiente di subshell separatamente (si veda AMBIENTE DI
ESECUZIONE DEL COMANDO sopra) above), e può provocare
l'uscita delle subshell prima di aver eseguito tutti i comandi nella
subshell.
Se un comando composto o una funzione di shell è
eseguito in un contesto in cui -e è ignorato, nessuno dei
comandi eseguiti all'interno di un comando composto o nel corpo di una
funzione verrà influenzato dall'impostazione di -e, anche
se -e è impostato e un comando ritorna uno stato di
insuccesso. Se un comando composto o una funzione di shell imposta
-e durante l'esecuzione in un contesto in cui -e è
ignorato, quelle impostazioni non avranno alcun effetto finché il
comando composto o il comando contenente la chiamata di funzione sia
completato.
- -f
- Disabilita l'espansione di percorso.
- -h
- Ricorda la posizione dei comandi man mano che sono ritrovati per
l'esecuzione. Questa è abilitata in modo predefinito.
- -k
- Tutti gli argomenti nella forma di istruzioni di assegnamento sono posti
nell'ambiente per un comando, non solo quelli che precedono il nome del
comando stesso.
- -m
- Modo monitor. Il job-control è abilitato. Quest'opzione è
attiva in modo predefinito per le shell interattive, su sistemi che lo
supportano (si veda JOB-CONTROL sopra). above).
Tutti i processi sono eseguiti in un gruppo di processo separato. Quando
un job in background è completato, la shell stampa una riga che
contiene il suo stato d'uscita.
- -n
- Legge i comandi ma non li esegue. Questo può essere usato per
controllare uno script di shell per errori di sintassi. Questo viene
ignorato se la shell è interattiva.
- -o
nome-opzione
- Il nome-opzione può essere uno dei seguenti:
- allexport
- Lo stesso di -a.
- braceexpand
- Lo stesso di -B.
- emacs
- Usa una interfaccia di modifica della riga di comando in stile emacs.
Questo è abilitato in modo predefinito quando la shell è
interattiva, a meno che la shell non sia avviata con l'opzione
--noediting. Questo inoltre influisce sull'interfaccia di modifica
usata per read -e.
- errexit
- Lo stesso di -e.
- errtrace
- Lo stesso di -E.
- functrace
- Lo stesso di -T.
- hashall
- Lo stesso di -h.
- histexpand
- Lo stesso di -H.
- history
- Abilita la cronologia dei comandi, come descritto above in precedenza,
sotto CRONOLOGIA. Questa opzione è attiva in
modo predefinito nelle shell interattive.
- ignoreeof
- L'effetto è lo stesso come se fosse stato eseguito il comando di
shell ``IGNOREEOF=10'' (si veda Variabili di shell sopra).
above).
- keyword
- Lo stesso di -k.
- monitor
- Lo stesso di -m.
- noclobber
- Lo stesso di -C.
- noexec
- Lo stesso di -n.
- noglob
- Lo stesso di -f.
- nolog
- Attualmente ignorato.
- notify
- Lo stesso di -b.
- nounset
- Lo stesso di -u.
- onecmd
- Lo stesso di -t.
- physical
- Lo stesso di -P.
- pipefail
- Se impostato, il valore di ritorno di una pipeline è il valore
dell'ultimo comando (quello più a destra) che esce con uno stato
d'uscita diverso da zero, o zero se tutti i comandi nella pipeline escono
con successo. Come comportamento predefinito, questa opzione è
disabilitata.
- posix
- Cambia il comportamento di bash dove le operazioni predefinite
differiscono dallo standard POSIX, in modo da corrispondere allo standard
(modalità posix). Si veda più avanti VEDERE
ANCHE below dove viene citato un documento che spiega nel
dettaglio come la modalità posix influenza il comportamento di
bash.
- privileged
- Lo stesso di -p.
- verbose
- Lo stesso di -v.
- vi
- Usa un'interfaccia di modifica della riga di comando in stile vi. Questo
inoltre influisce sull'interfaccia di modifica usata per read
-e.
- xtrace
- Lo stesso di -x.
Se -o è fornito con nessun nome-opzione, sono
stampati i valori delle opzioni correnti. Se +o è fornito con
nessun nome-opzione, una serie di comandi set per ricreare le
impostazioni dell'opzione corrente viene visualizzata sullo standard
output.
- -p
- Attiva il modo privilegiato. In questo modo, i file
$ENV e $BASH_ENV non vengono
elaborati, le funzioni di shell non sono ereditate dall'ambiente e
le variabili SHELLOPTS,
BASHOPTS, CDPATH e
GLOBIGNORE se appaiono in un ambiente, vengono
ignorate. Se la shell è avviata con l'id (gruppo) effettivo
dell'utente non uguale all'id (gruppo) reale dell'utente, e non viene
fornita l'opzione -p, queste azioni vengono eseguite e l'id
effettivo dell'utente è impostato all'id reale dell'utente. Se
viene fornita l'opzione -p all'avvio, l'id effettivo dell'utente
non è reimpostato. Disattivare questa opzione fa sì che gli
id effettivi dell'utente e del gruppo siano impostati agli id reali
dell'utente e del gruppo.
- -r
- Abilita una modalità della shell più stringente. Questa
opzione non può essere disabilitata una volta abilitata.
- -t
- Esce dopo aver letto ed eseguito un comando.
- -u
- Tratta le variabili e i parametri non impostati, diversi dai parametri
speciali "@" e "*", o variabili vettore che hanno come
indice "@" o "*", come un errore quando effettua
l'espansione di parametro. Se l'espansione è tentata su una
variabile o parametro non impostato, la shell stampa un messaggio di
errore e, se non interattiva, esce con uno stato diverso da zero.
- -v
- Stampa le righe in input alla shell appena sono lette.
- -x
- Dopo l'espansione di ogni comando semplice, comando for,
comando case, comando select o comando for
aritmetico, mostra il valore espanso di PS4, seguito dal
comando e dai suoi argomenti espansi o dall'elenco di parole
associate.
- -B
- La shell effettua l'espansione delle parentesi graffe (si veda
Espansione delle parentesi graffe sopra). above). Questo è
attivo in modo predefinito.
- -C
- Se impostato, bash non sovrascrive un file esistente con gli
operatori di ridirezione >, >& e <>.
Una sovrascrittura può ancora essere ottenuta creando i file di
output usando l'operatore di ridirezione >| al posto di
>.
- -E
- Se impostato, ogni segnale intercettato ERR è ereditato
dalle funzioni di shell, sostituzioni di comando e comandi eseguiti in un
ambiente di subshell. Il segnale intercettato ERR non viene
normalmente ereditato in questi casi.
- -H
- Abilita la sostituzione della cronologia in stile !. Quest'opzione
è attiva in modo predefinito quando la shell è
interattiva.
- -P
- Se impostato, non risolve i collegamenti simbolici quando esegue comandi
come cd che cambiano la directory di lavoro corrente. È
invece usata la struttura di directory fisica. Come comportamento
predefinito, bash segue la successione logica delle directory
quando si eseguono comandi che cambiano la directory corrente.
- -T
- Se impostata, i comandi sui segnali intercettati DEBUG e
RETURN sono ereditati dalle funzioni di shell, dalle sostituzioni
di comando e dai comandi eseguiti in un ambiente di subshell. I segnali
intercettati DEBUG e RETURN normalmente non vengono
ereditati in questi casi.
- --
- Se nessun argomento segue questa opzione, allora i parametri posizionali
sono assenti. Altrimenti, i parametri posizionali sono impostati agli
arg, anche se alcuni di loro iniziano con un -.
- -
- Segnala la fine delle opzioni, e fa sì che tutti i rimanenti
arg siano assegnati ai parametri posizionali. Le opzioni -x
e -v sono disattivate. Se non vi è alcun arg, i
parametri posizionali rimangono inalterati.
Le opzioni sono disattivate in modo predefinito se non specificato
diversamente. Usare + piuttosto che - causa la disattivazione di queste
opzioni. Le opzioni possono anche essere specificate come argomenti a
un'invocazione della shell. Il corrente insieme di opzioni può essere
trovato in $-. Lo stato di ritorno è sempre 0 (vero) a meno
che non si incontri un'opzione non valida.
- shift
[n]
- I parametri posizionali da n+1 ... sono rinominati $1
.... I parametri rappresentati dai numeri $# fino a
$#-n+1 non sono impostati. n dev'essere un numero non
negativo minore o uguale a $#. Se n è 0, nessun
parametro viene cambiato. Se n è omesso, è
considerato valere 1. Se n è più grande di $#,
i parametri posizionali non sono cambiati. Lo stato di ritorno è
più grande di 0 se n è più grande di $#
o minore di 0; altrimenti 0.
- shopt
[-pqsu] [-o] [nome-opzione ...]
- Attiva/disattiva i valori delle impostazioni che controllano il
comportamento opzionale della shell. Le impostazioni possono essere o
quelle elencate sotto o, se viene usata l'opzione -o, quelle
disponibili con l'opzione -o al comando incorporato set.
Senza opzioni, o con l'opzione -p, viene mostrata una lista di
tutte le opzioni impostabili, con una indicazione se ognuna è
impostata o no; se vengono forniti nomi-opzioni, l'output è
ristretto a queste opzioni. L'opzione -p fa sì che l'output
sia mostrato in una forma che può essere riutilizzata come input.
Altre opzioni hanno il seguente significato:
- -s
- Abilita (attiva) ogni optname.
- -u
- Disabilita (disattiva) ogni optname.
- -q
- Sopprime il normale output (modalità silenziosa); lo stato di
ritorno indica se il optname è attivato o non attivato. Se
sono dati argomenti optname multipli con -q, lo stato di
ritorno è 0 se tutti gli optname sono attivati; diverso da
zero altrimenti.
- -o
- Restringe i valori di optname a quelli definiti per l'opzione
-o del comando incorporato set.
Se una delle opzioni -s o -u viene usata senza
argomenti optname, shopt mostra solo quelle opzioni che sono,
rispettivamente, attivate o non attivate. Se non diversamente indicato le
opzioni shopt sono disabilitate (non attivate) in modo
predefinito.
Lo stato di ritorno quando vengono elencate delle opzioni è
0 se tutti gli optname sono abilitati, altrimenti è diverso da
zero. Quando si impostano o si rimuovono opzioni, lo stato di ritorno
è 0 tranne quando optname non è una valida opzione di
shell.
L'elenco delle opzioni di shopt è:
- assoc_expand_once
- Se abilitato, la shell sopprime la valutazione multipla degli indici usati
con vettori associativi durante la valutazione delle espressioni
aritmetiche, durante l'esecuzione dei comandi incorporati che assegnano
variabili, e durante l'esecuzione di comandi incorporati che derefenziano
vettori.
- autocd
- Se impostato, viene eseguito un nome di comando che è il nome di
una directory come se fosse un argomento del comando cd. Questa
opzione viene usata solo dalle shell interattive.
- cdable_vars
- Se impostata, un argomento al comando incorporato cd che non sia
una directory è considerato come il nome di una variabile il cui
valore è la directory verso cui cambiare.
- cdspell
- Se impostata, vengono corretti errori minori nell'ortografia di un
componente di directory in un comando cd. Gli errori ricercati sono
caratteri invertiti, mancanza di un carattere e un carattere in
più. Se viene trovata una correzione il nome-file corretto viene
stampato e il comando prosegue. Quest'opzione è usata solo dalle
shell interattive.
- checkhash
- Se impostata, bash controlla che un comando trovato in una tabella
hash esista prima di tentarne l'esecuzione. Se un comando la cui posizione
è disponibile in un elemento della tabella hash non esiste
più, viene effettuata una normale ricerca di percorso.
- checkjobs
- Se impostato, bash elenca lo stato dei job in esecuzione e di
quelli terminati prima di uscire da una shell interattiva. Se vi sono job
in esecuzione, l'uscita verrà rimandata fino a quando non viene
tentata una seconda uscita senza che intervenga un comando (si veda
JOB CONTROL sopra). above). La shell ritarda sempre
l'uscita se un qualsiasi job viene fermato.
- checkwinsize
- Se impostata, bash controlla la dimensione della finestra dopo ogni
comando esterno (non incorporato) e, se necessario, aggiorna i valori di
LINES e COLUMNS. Quest'opzione
è abilitata in modo predefinito.
- cmdhist
- Se impostata, bash tenta di salvare tutte le righe di un comando a
riga multipla nello stesso elemento di cronologia. Questo facilita la
ripetizione di comandi multiriga. Questa opzione è abilitata in
modo predefinito, ma ha effetto solo se è abilitata la cronologia
dei comandi, come descritto above sopra in
CRONOLOGIA.
- compat31
- compat32
- compat40
- compat41
- compat42
- compat43
- compat44
- compat50
- Questi controllano alcuni aspetti della modalità di
compatibilità della shell (vedere MODALITÀ
COMPATIBILE DELLA SHELL below).
- complete_fullquote
- Se impostata, bash quota tutti i metacaratteri di shell nei
nomi-file e di directory quando effettua il completamento. Se non è
impostata, bash rimuove i metacaratteri come il segno del dollaro
dal set di caratteri che saranno quotati nei nomi-file completati quando
questi metacaratteri appaiono in riferimenti a variabili di shell nelle
parole da completare. Questo vuol dire che i segni del dollaro nei nomi di
variabile che si espandono a directory non verranno quotati; comunque, non
saranno quotati neanche i segni del dollaro che appaiono nei nomi-file.
Questo è attivo solo quando bash usa le barre inverse per quotare i
nomi-file completati. Questa variabile è impostata in modo
predefinito, che è il comportamento predefinito di bash nelle
versioni fino alla 4.2.
- direxpand
- Se impostata, bash sostituisce i nomi di directory con i risultati
dell'espansione di parola mentre effettua il completamento del nome di
file. Questo cambia i contenuti del buffer di modifica di readline. Se non
è impostata, bash tenta di conservare ciò che ha
scritto l'utente.
- dirspell
- Se impostata, bash tenta la correzione dell'ortografia sui nomi di
directory durante il completamento di parola se il nome di directory
fornito inizialmente non esiste.
- dotglob
- Se impostata, bash include i nomi-file che iniziano con un `.' nel
risultato dell'espansione del percorso. I nomi-file
“.” e “..” devono essere sempre
confrontati esplicitamente, anche se dotglob è
impostato.
- execfail
- Se impostata, una shell non interattiva non esce se non può
eseguire il file specificato come argomento al comando incorporato
exec. Una shell interattiva non esce se exec non ha
successo.
- expand_aliases
- Se impostata, gli alias vengono espansi come descritto above in
precedenza, sotto ALIASES. Questa opzione è abilitata
in modo predefinito per le shell interattive.
- extdebug
- Se impostata all'invocazione della shell, o in un file di avvio della
shell, provvede all'esecuizone del "debugger profile" prima che
la shell venga avviata, allo stesso modo dell'opzione --debugger.Se
impostata dopo l'invocazione, il comportamento previsto per poter usare
dei debugger è abilitato:
- 1.
- L'opzione -F al comando incorporato declare mostra il nome
di file di origine e il numero di riga corrispondente a ogni nome di
funzione fornita come argomento.
- 2.
- Se il comando eseguito nella gestione del segnale DEBUG ritorna un
valore diverso da zero, il comando successivo viene saltato e non è
eseguito.
- 3.
- Se il comando eseguito nella gestione del segnale DEBUG ritorna il
valore 2, e la shell è in esecuzione in una subroutine (una
funzione di shell o uno script di shell eseguito dai comandi incorporati
. o source), la shell simula una chiamata a
return.
- 4.
- BASH_ARGC e BASH_ARGV sono aggiornati
come descritto nelle loro descrizioni above).
- 5.
- Il tracciamento delle funzioni è abilitato: sostituzione di
comando, funzioni di shell, e subshell invocate con (
comando ) ereditano le intercettazione di segnale
DEBUG e RETURN.
- 6.
- Il tracciamento degli errori è abilitato: sostituzione di comando,
funzioni di shell, e subshell invocate con ( comando
) ereditano le intercettazione di segnale ERR.
- extglob
- Se impostata, le caratteristiche di corrispondenza estesa di modelli
descritte above sotto Espansione di percorso, sono abilitate.
- extquote
- Se impostato, la quotatura $'string' e
$"string" è effettuata all'interno delle
espansioni di ${parametro} racchiuse tra virgolette.
Quest'opzione è abilitata in modo predefinito.
- failglob
- Se impostata, i modelli che non generano nomi validi di file durante
l'espansione del percorso danno come risultato un errore di
espansione.
- force_fignore
- Se impostata, i suffissi specificati dalla variabile di shell
FIGNORE fanno si che delle parole vengano ignorate quando
viene effettuato il completamento delle parole anche se le parole
ignorate sono i soli possibili completamenti. Si veda VARIABILI
DELLA SHELL above sopra per una descrizione di
FIGNORE. Quest'opzione è abilitata in modo
predefinito.
- globasciiranges
- Se impostata, le espressioni di intervallo nelle espressioni tra parentesi
graffe nella ricerca di corrispondenze (si veda Modelli di
ricerca above) più sopra) si comportano come nella
localizzazione tradizionale C quando effettuano confronti. Cioè, la
sequenza di collazione della localizzazione corrente non viene presa in
considerazione, cosicché b non collazionerà fra
A e B , e i caratteri ASCII maiuscolo e minuscolo verranno
collazionati insieme.
- globskipdots
- Se impostata, l'espansione di percorso non farà mai corrispondere i
nomi file “.” e “..”, nonostante
il modello inizi con “.”. Questa opzione è
attiva in maniera predefinita.
- globstar
- Se impostata, il modello ** usato in un contesto di espansione del
nome di percorso trova tutti i file e zero o più directory e
sottodirectory che soddisfano i criteri di ricerca. Se il modello è
seguito da una /, trova solo le directory e sottodirectory che
soddisfano i criteri di ricerca.
- gnu_errfmt
- Se impostata, i messaggi di errore della shell vengono scritti nel formato
GNU standard dei messaggi di errore.
- histappend
- Se impostata, l'elenco della cronologia è accodato al file indicato
dalla variabile HISTFILE all'uscita della shell, invece che
sostituire il file preesistente.
- histreedit
- Se impostata, e readline è in uso, viene data
l'opportunità a un utente di ripetere una sostituzione della
cronologia che non ha avuto successo.
- histverify
- Se impostata, e readline è in uso, i risultati della
sostituzione della cronologia non sono immediatamente passati
all'analizzatore della shell. Invece, la riga risultante viene caricata
nel buffer di modifica readline, permettendo ulteriori
modifiche.
- hostcomplete
- Se impostata, e readline è in uso, bash tenta di
effettuare il completamento del nome di host quando una parola contenente
un @ è in corso di completamento (si veda
Completamento in precedenza, sotto READLINE
above). Questa è abilitata in modo predefinito.
- huponexit
- Se impostata, bash invia SIGHUP a tutti i job
all'uscita di una shell di login interattiva.
- inherit_errexit
- Se impostata, la sostituzione di comando eredita il valore dell'opzione
errexit anziché annullarla nell'ambiente della sub shell.
Questa opzione è abilitata quando la modalità posix
è abilitata.
- Se impostata, fa sì che, se una parola inizia con #, quella
parola e tutti i caratteri rimanenti su quella riga siano ignorati in una
shell interattiva (si veda COMMENTI sopra). above).
Quest'opzione è abilitata in modo predefinito.
- lastpipe
- Se impostata, e job control non è attivo, la shell esegue l'ultimo
comando di una pipeline non eseguita in background nell'ambiente di shell
corrente.
- lithist
- Se impostata, e l'opzione cmdhist è abilitata, i comandi
multiriga sono salvati nella cronologia includendo i newline, piuttosto
che usando come separatori il punto e virgola, dove possibile.
- localvar_inherit
- Se impostato, le variabili locali ereditano il valore e gli attributi di
variabili con lo stesso nome che esistono in uno scope precedente prima
che sia loro assegnato qualsiasi nuovo valore. L'attributo nameref non
è ereditato.
- localvar_unset
- Se impostata, chiamare unset su variabili locali dello scope
precedente le marca in modo che gli utilizzi successivi la trovino
annullata finché la funzione non termina. Questo è identico
al comportamento di annullare una variabile locale nello scope della
funzione corrente.
- login_shell
- La shell imposta quest'opzione se viene avviata come shell di login (si
veda INVOCAZIONE sopra). above). Il valore non
può essere cambiato.
- mailwarn
- Se impostata, e un file sul quale bash sta ricercando della posta
ha avuto un accesso dall'ultima volta che è stato controllato,
viene visualizzato il messagio “The mail in mailfile has
been read”.
- no_empty_cmd_completion
- Se impostata, e readline è in uso, bash non tenta di
cercare il PATH per possibili completamenti quando viene
tentato il completamento di una riga vuota.
- nocaseglob
- Se impostata, bash individua i nomi-file senza distinguere le
lettere maiuscole dalle minuscole quando effettua l'espansione del
percorso (si veda Espansione del percorso sopra). above).
- nocasematch
- Se impostata, bash confronta modelli senza distinguere le maiuscole
dalle minuscole quando ricerca corrispondenze durante l'esecuzione dei
comandi condizionali case o [[, quando effettua espansioni
di parola in una sostituzione di modello, o quando filtra possibili
completamenti come parte di un completamento programmabile.
- noexpand_translation
- Se impostata, bash racchiude il risultato tradotto della quotatura
di $"..." tra apici singoli anziché doppie virgolette. Se
la stringa non è tradotta, questo non ha effetto.
- nullglob
- Se impostata, bash permette ai modelli che non individuano nessun
file (si veda Espansione del percorso sopra) above) di espandere
come una stringa nulla, piuttosto che essere presi letteralmente.
- patsub_replacement
- Se impostato, bash espande le occorrenze di & nella
stringa di rimpiazzo durante la sostituzione di modelli al test che che
corrisponde al modello, come descritto in Espansione di parametri
above. Quest'opzione è abilitata in modo predefinito.
- progcomp
- Se impostata, i servizi di completamento programmabile (si veda
Completamento programmabile sopra) above) vengono abilitati.
Quest'opzione è abilitata in modo predefinito.
- progcomp_alias
- Se impostato, e con il completamento programmabile attivo, bash
tratta un nome di comando che non ha nessun completamento come un
possibile alias e cerca di espanderlo. Se ha un alias, bash riprova
il completamento programmabile usando la parola del comando risultante
dall'espansione dell'alias.
- promptvars
- Se impostata, le stringhe di prompt subiscono espansione di parametro,
sostituzione di comando, espansione aritmetica e rimozione delle
virgolette dopo che sono stati espansi come descritto in
STRINGHE DI PROMPT sopra above. Quest'opzione
è abilitata in modo predefinito.
- restricted_shell
- La shell imposta questa opzione se è avviata in modalità
ristretta (si veda SHELL RISTRETTA più
avanti). below). Il valore non può essere cambiato. Questo
non viene reimpostato quando i file di avvio vengono eseguiti, permettendo
ai file di avvio di accertare se una shell è ristretta o meno.
- shift_verbose
- Se impostata, il comando incorporato shift stampa un messaggio di
errore quando il numero di comandi shift effettuati eccede il numero dei
parametri posizionali.
- sourcepath
- Se impostata, il comando incorporato . (source) usa il
valore di PATH per trovare la directory contenente il file
fornito come argomento. Quest'opzione è abilitata in modo
predefinito.
- varredir_close
- Se impostata, la shell chiude automaticamente i descrittori di file
assegnati usando la sintassi di ridirezione {varname} (vedere
RIDIREZIONE above) anziché lasciarli aperti
quando il comando termina.
- xpg_echo
- Se impostata, il comando incorporato echo espande sequenze di
protezione tramite la barra inversa in modo predefinito.
- suspend
[-f]
- Sospende l'esecuzione di questa shell fino a che non riceve un segnale
SIGCONT. Una shell di login, o una shell che non abbia
il controllo dei job attivo, non può essere sospesa;
l'opzione -f può essere usata per non tener conto di questo
e forzare la sospensione. Lo stato di ritorno è 0 tranne quando la
shell è una shell di login, o se non è attivo il controllo
dei job, e non è fornito -f.
- test
expr
- [ expr ]
- Ritorna uno stato di 0 (vero) o 1 (falso) a seconda del risultato della
valutazione dell'espressione condizionale expr. Ogni operatore e
operando deve essere un argomento separato. Le espressioni sono composte
dagli elementi descritti above in precedenza, sotto ESPRESSIONI
CONDIZIONALI. test non accetta opzioni, né
accetta, ignorandolo, un argomento -- come indicatore di fine delle
opzioni.
Le espressioni possono essere combinate usando i seguenti
operatori, elencati in ordine decrescente di precedenza. La valutazione
dipende dal numero di argomenti; si veda più avanti. La
precedenza degli operatori è usata quando ci sono cinque o
più argomenti.
- ! expr
- Vero se expr è falso.
- ( expr )
- Ritorna il valore di expr. Questo può essere usato per
modificare la normale precedenza degli operatori.
- expr1 -a
expr2
- Vero se sia expr1 che expr2 sono vere.
- expr1 -o
expr2
- Vero se o expr1 o expr2 è vera.
test e [ valutano espressioni condizionali usando
una serie di regole basate sul numero di argomenti.
- 0 argomenti
- L'espressione è falsa.
- 1 argomento
- L'espressione è vera se e solo se l'argomento non è
nullo.
- 2 argomenti
- Se il primo argomento è !, l'espressione è vera se e
solo se il secondo argomento è nullo. Se il primo argomento
è uno degli operatori condizionali elencati above in precedenza,
sotto ESPRESSIONI CONDIZIONALI, l'espressione
è vera se il test unario è vero. Se il primo
argomento non è un operatore condizionale unario valido,
l'espressione è falsa.
- 3 argomenti
- Le seguenti condizioni sono applicate nell'ordine elencato. Se il secondo
argomento è uno degli operatori binari condizionali elencati above
in precedenza, sotto ESPRESSIONI CONDIZIONALI, il
risultato dell'espressione è il risultato del test binario
che usa gli argomenti primo e terzo come operandi. Quando ci sono tre
argomenti, -a e -o sono considerati operatori binari. Se il
primo argomento è !, il valore è la negazione del
test con due argomenti costituito dagli argomenti secondo e terzo. Se il
primo argomento è esattamente ( e il terzo argomento
è esattamente ), il risultato è il test, con 1
argomento, del secondo argomento. Altrimenti, l'espressione è
falsa.
- 4 argomenti
- Le seguenti condizioni sono applicate nell'ordine elencato. Se il primo
argomento è !, il valore è la negazione del test con
tre argomenti costituito dagli argomenti rimanenti. Se il primo argomento
è esattamente ( e il quarto argomento è esattamente
), il risultato è il test a due argomenti con il secondo e
terzo degli argomenti. Altrimenti l'espressione è analizzata e
valutata in accordo alle precedenze secondo le regole elencate sopra.
- 5 o più argomenti
- L'espressione è analizzata e valutata secondo le precedenze usando
le regole elencate sopra.
Quando sono usati con test o [, gli operatori
< e > vengono ordinati lessicograficamente secondo
l'ordinamento ASCII.
- times
- Stampa i tempi spesi come utente e come sistema per la shell e per i
processi eseguiti dalla shell. Lo stato di ritorno è 0.
- trap [-lp]
[[arg] sigspec ...]
- Il comando arg dev'essere letto e eseguito quando la shell riceve
il segnale(i) sigspec. Se arg è assente (e c'è
un singolo sigspec) o -, ogni segnale specificato è
riportato alla sua configurazione originale (il valore che aveva al
momento dell'ingresso nella shell). Se arg è la stringa
nulla il segnale specificato da ogni sigspec è ignorato
dalla shell e dai comandi che essa invoca. Se arg non è
presente e -p è stato fornito, allora i comandi di
intercettazione di segnale associati a ogni sigspec vengono
visualizzati. Se non viene fornito alcun argomento o se è dato solo
-p, trap stampa la lista dei comandi associati a ogni
segnale. L'opzione -l fa sì che la shell stampi una lista di
nomi di segnale e i numeri a loro corrispondenti. Ogni sigspec
è o un nome di segnale definito in <signal.h>, o un
numero di segnale. I nomi di segnale possono essere scritti sia in
minuscolo che in maiuscolo e il prefisso SIG è
opzionale.
Se un sigspec è EXIT (0) il
comando arg è eseguito all'uscita della shell. Se
un sigspec è DEBUG, il comando
arg viene eseguito prima di ogni comando semplice, comando
for, comando case, comando select, ogni comando
for aritmetico, e prima di eseguire il primo comando in una
funzione di shell (si veda GRAMMATICA DELLA SHELL
sopra). above). Fare riferimento alla descrizione dell'opzione
extdebug del comando incorporato shopt per dettagli sul
suo effetto nella gestione del segnale DEBUG. Se un
sigspec è RETURN, il comando arg
viene eseguito ogni volta che una funzione di shell o uno script
eseguito coi comandi incorporati . o source completa
l'esecuzione.
Se un sigspec è ERR, il comando
arg viene eseguito ogni volta che una pipeline (che
può essere composta da un solo comando semplice), una lista o un
comando semplice ha uno stato di uscita diverso da 0, tenuto conto delle
seguenti condizioni. La gestione del segnale ERR non viene
invocata se il comando in errore fa parte della lista di comandi
immediatamente seguente la parola chiave while o until, se
fa parte del test in un'istruzione if, se fa parte di un comando
eseguito in una lista && o || eccetto il comando
seguente l'ultimo && o ||, un qualsiasi comando in
una pipeline eccetto l'ultimo, o se il valore di ritorno del comando in
esecuzione viene negato da un !. Queste sono le stesse condizioni
imposte all'opzione errexit (-e).
I segnali ignorati al momento dell'ingresso della shell non
possono essere intercettati o resettati. I segnali intercettati non
ignorati sono riportati al loro valore originale in una subshell o in un
ambiente di subshell quando ne è stato creato uno. Lo stato di
ritorno è falso se un sigspec non è valido;
altrimenti trap ritorna 0 (vero).
- type [-aftpP]
nome [nome ...]
- Senza opzioni, indica come dovrà essere interpretato ciascun
nome se usato come un nome di comando. Se è usata l'opzione
-t, type stampa una stringa che è una fra
alias, keyword, function, builtin o
file se nome è, rispettivamente, un alias, una parola
riservata della shell, una funzione, un comando incorporato, o un file su
disco. Se il nome non è trovato, non viene stampato nulla,
ed è ritornato uno stato d'uscita di falso Se viene usata l'opzione
-p, type ritorna o il nome del file su disco che dovrebbe
essere eseguito se nome fosse specificato come nome di comando, o
nulla se ``type -t name'' non avesse ritornato file. L'opzione
-P forza PATH a ricercare ogni nome,
anche se ``type -t name'' non dovesse ritornare file. Se un comando
è nella tabella hash, -p e -P stampano il valore
nella tabella hash, che non necessariamente è il file che appare
per primo in PATH. Se viene usata l'opzione
-a, type stampa tutti le posizioni che corrispondono
a un eseguibile chiamato nome. Questo include alias e funzioni, se
e solo se non viene usata anche l'opzione -p. La tabella hash dei
comandi non è consultata quando si usa -a. L'opzione
-f sopprime la ricerca della funzione di shell, come col comando
incorporato command. type ritorna 0 [vero] se tutti
argomenti vengono trovati, falso se non ne viene trovato alcuno.
- ulimit [-HS]
-a
- ulimit
[-HS] [-bcdefiklmnpqrstuvxPRT [limite]]
- Fornisce controllo sulle risorse disponibili per la shell e per i processi
avviati da essa, sui sistemi che consentono un tale controllo. Le opzioni
-H e -S specificano che viene impostato il limite hard o
limite soft per la data risorsa. Un limite hard non può essere
aumentato da un utente comune una volta impostato; un limite soft
può essere aumentato fino al valore del limite hard. Se né
-H né -S sono specificati, vengono impostati entrambi
i limiti, hard e soft. Il valore di limite può essere un
numero nell'unità specificata per la risorsa, o uno dei valori
speciali hard, soft o unlimited. che stanno
rispettivamente per limite hard corrente, limite soft corrente e nessun
limite. Se limite è omesso, viene stampato il valore
corrente del limite soft della risorsa, a meno che non venga data
l'opzione -H. Quando è specificata più di una
risorsa, il nome del limite e l'unità, se appropriati, vengono
stampati prima del valore. Le altre opzioni sono interpretate come
segue:
- -a
- Sono riportati tutti i limiti correnti; nessun limite viene impostato
- -b
- La dimensione massima del buffer del socket
- -c
- la dimensione massima dei file core creati
- -d
- la dimensione massima del segmento dati di un processo
- -e
- La priorità massima di schedulazione dei processi
("nice")
- -f
- la dimensione massima dei file scritti dalla shell e dai suoi figli
- -i
- Il numero massimo di segnali pendenti
- -k
- Il numero massimo di kqueue (code degli eventi del kernel) che possono
essere allocate
- -l
- la dimensione massima di memoria che può essere bloccata
- -m
- la dimensione massima della memoria occupata (molti sistemi non rispettano
questo limite)
- -n
- il numero massimo di descrittori di file aperti (la maggior parte dei
sistemi non permette che questo valore sia cambiato)
- -p
- la dimensione delle pipe in blocchi da 512 byte (questo non può
essere cambiato)
- -q
- Il numero massimo di byte nelle code dei messaggi POSIX
- -r
- La priorità massima di schedulazione dei processi in tempo
reale
- -s
- la dimensione massima dello stack
- -t
- il massimo quantitativo di tempo macchina utilizzabile, in secondi
- -u
- il numero massimo di processi disponibili per un singolo utente
- -v
- Il massimo ammontare di memoria virtuale disponibile per la shell e, su
alcunisistemi, ai suoi figli
- -x
- Il numero massimo di file lock
- -P
- Il numero massimo di pseudoterminali
- -R
- Il tempo massimo che un processo in real-time può durare prima che
sia bloccato, in microsecondi
- -T
- Il numero massimo di thread
Se limite è dato, e non viene usata l'opzione
-a, limite è il nuovo valore della risorsa specificata.
Se nessuna opzione è data, si considera impostata l'opzione
-f. I valori sono in multipli di 1024 byte, tranne che per -t,
che è in secondi, -R, che è in microsecondi;-p,
che è in unità di blocchi da 512 byte; -P, -T,
-b , -k, -n e -u, che sono numeri puri e ,
quando si è in modalità posix, -c e -f, che sono
in multipli di 512 byte. Lo stato di ritorno è 0 tranne quando viene
incontrata un'opzione o un argomento non valido, o avvenga un errore mentre
si imposta un nuovo limite.
- umask [-p]
[-S] [modo]
- La maschera di creazione dei file dell'utente è impostata a
modo. Se modo inizia con una cifra, è interpretato
come numero ottale; altrimenti è interpretato come una maschera in
modalità simbolica simile a quelle accettate da chmod(1). Se
modo è omesso, viene stampato il valore corrente della
maschera. L'opzione -S fa sì che la maschera venga stampata
in formato simbolico; l'output predefinito è un numero ottale. Se
viene fornita l'opzione -p e modo è omesso, l'output
è in una forma riutilizzabile come input. Lo stato di ritorno
è 0 se il modo è stato cambiato con successo o se nessun
argomento modo era stato fornito, e falso altrimenti.
- unalias
[-a] [nome ...]
- Rimuove ciascun nome dalla lista degli alias definiti. Se si
specifica -a, sono rimosse tutte le definizioni di alias. Il valore
di ritorno è 0 (vero) tranne quando un nome fornito non
è un alias attualmente definito.
- unset [-fv]
[-n] [nome ...]
- Per ciascun nome, rimuove la corrispondente variabile o funzione.
Se è specificata l'opzione -v, ogni nome designa una
variabile di shell, e quella variabile viene rimossa. Le variabili in sola
lettura non possono essere rimosse. Se viene specificata -f, ogni
nome designa una funzione di shell, e la definizione di funzione
viene rimossa. Se è impostata l'opzione -n, e nome
è una variabile con l'attributo nameref, verrà
annullata nome piuttosto che la variabile a cui fa riferimento.
-n non ha nessun effetto se è impostata l'opzione -f.
Se non viene impostata nessuna opzione, ogni nome fa riferimento a
una variabile; se non ci sono variabili con quel nome, ogni funzione con
quel nome viene annullata. Ogni variabile o funzione annullata è
eliminata dall'ambiente passato ai comandi successivi. Se una qualsiasi
fra BASH_ALIASES, BASH_ARGV0,
BASH_CMDS, BASH_COMMAND,
BASH_SUBSHELL, BASHPID,
COMP_WORDBREAKS, DIRSTACK,
EPOCHREALTIME, EPOCHSECONDS,
FUNCNAME, GROUPS,
HISTCMD, LINENO,
RANDOM, SECONDS o
SRANDOM è annullata, perde la sua speciale
proprietà, anche se viene successivamente ridefinita. Lo stato
d'uscita è 0 (vero) a meno che un nome non sia in sola
lettura o non l'annullamento fallisca.
- wait [-fn]
[-p varname] [id ...]
- Aspetta ogni processo figlio specificato e ritorna il suo stato di
completamento. Ciascun id può essere un ID di processo o un
riferimento a un job; se è dato un riferimento a un job, si
aspettano tutti i processi nella pipeline di quel job. Se id
è omesso, si aspettano tutti i processi figli correntemente attivi
e l'ultima sostituzione di processo eseguita, se il suo id di processo
è lo stesso di $!, e lo stato di ritorno è 0. Se
è specificata l'opzione -n, wait attende che uno
qualsiasi dei job indicati nell'elenco di id, oppure, se non viene
indicato nessun id, attende che un job qualsiasi termini e
restituisce il suo stato d'uscita. Se nessuno degli argomenti forniti
è un figlio della shell, o se non sono indicati argomenti e la
shell non ha figli dei quali è in attesa, il valore restituito
è 127. Se viene indicata l'opzione -p, l'identificato di
processo o di job per il quale viene restituito il codice d'errore viene
messo nella variabile varname. Se è specificata l'opzione
-f, e il job-control è abilitato, wait fa terminare
id prima di restituire lo stato d'uscita, invece di restituirlo
quando cambia stato. Se id specifica un processo o job non
esistenti, lo stato di ritorno è 127. Se wait viene
interrotta da un segnale, lo stato di ritorno sarà maggiore di 127,
come descritto in SEGNALI above. Altrimenti, lo stato di ritorno
è lo stato d'uscita dell'ultimo processo o job di cui si è
atteso il completamento.
Bash-4.0 ha introdotto il concetto di livello di
compatibilità della shell indicato come un insieme di opzioni del
comando incorporato shopt (compat31, compat32,
compat40, compat41 eccetera). Attualmente c'è un solo
livello di compatibilità -- ogni opzione è mutuamente
esclusiva. Il livello di compatibilità ha lo scopo di permettere
all'utente di selezionare il comportamento di una precedente versione che
è incompatibile con le nuove versioni. Va usato nel periodo di
transizione durante il quale si modifica lo script perché funzioni
con caratteristiche e il comportamento correnti. È stato ideato come
soluzione temporanea.
Questa sezione non menziona comportamenti che sono standard per
una particolare versione (esempio, impostando compat32 si fa
sì che mettere tra virgolette l'operando di destra di un operando di
espressioni regolari, faccia il quote dei caratteri speciali nella parola,
che è il comportamento predefinito di bash-3.2 e versioni
successive.)
Se un utente abilita ad esempio compat32, può
impattare il comportamento di altri livelli di compatibilità fino al
livello di compatibilità corrente. L'idea è che ogni livello
di compatibilità controlli il comportamento che cambiò in
quella versione di bash, ma quel comportamento potrebbe essere stato
presente anche in versioni precedenti. Ad esempio, l'utilizzo di confronti
basati sulla localizzazione nel comando [[ è stato introdotto
con bash-4.1, mentre le versioni precedenti usavano un confronto basato su
ASCII; quindi abilitando compat32 si attiverà anche il
confronto basato su ASCII. Questa granularità potrebbe non essere
sufficiente per tutti gli usi, e quindi è importante che gli utenti
utilizzino i livelli di compatibilità con cautela. Leggere la
documentazione specifica per le varie caratteristiche per conoscere il
comportamento attuale.
Bash-4.3 ha introdotto una nuova variabile:
BASH_COMPAT. Il valore assegnato a questa variabile
(un numero di versione decimale come 4.2, o un intero corrispondente
all'opzione compatNN, come 42) determina il livello di
compatibilità.
Da bash-4.4, bash ha iniziato a deprecare l'utilizzo di livelli di
compatibilità più vecchi. Più avanti le opzioni saranno
rimosse in favore di BASH_COMPAT.
Bash-5.0 è la versione ultima per la quale esistono opzioni
individuali di shopt per versioni precedenti. Gli utenti dovranno usare
BASH_COMPAT per bash-5.0 e versioni successive.
La seguente tabella descrive i cambi di comportamento per ogni
impostazione di livello di compatibilità. Il tag
compatNN è usato come scorciatoia per indicare le
impostazioni di compatibilità per il livello NN usando uno dei
seguenti meccanismi. Per versioni precedenti a bash-5.0, il livello di
compatibilità può essere impostato usando la corrispondente
opzione compatNN di shopt. Per bash-4.3 e successive versioni,
è preferibile usare la variabile BASH_COMPAT, che poi
diventa obbligatorio per bash-5.1 e versioni successive.
- compat31
- •
- mettere tra virgolette l'operando a destra del comando di corrispondenza
delle regexp (=~) non ha effetti speciali in [[
- compat32
- •
- interrompere una lista di comandi come "a ; b ; c" causa
l'esecuzione del comando successivo nella lista (in bash-4.0 e versioni
successive, la shell si comporta come se avesse ricevuto le l'interruzione
e quindi interrompere un comando in una lista blocca l'esecuzione
dell'intera lista)
- compat40
- •
- gli operatori < e > del comando condizionale [[
non considerano la localizzazione corrente nel confronto fra stringhe, ma
usano l'ordinamento ASCII. Le versioni di bash precedenti a bash-4.1 usano
la collazione ASCII e strcmp(3); bash-4.1 e versioni successive
usano la sequenza di collazione della localizzazione corrente e
strcoll(3).
- compat41
- in modalità posix, time può essere seguito da
opzioni ed essere comunque riconosciuto come una parola riservata (questa
è l'interpretazione POSIX 267)
- in modalità posix il parser richiede che un siano presenti
un numero pari di virgolette singole nella porzione di word di una
espansione di parametri tra virgolette doppie; e le tratta diversamente in
modo che i caratteri all'interno delle virgolette singole siano
considerati quotati (questa è l'interpretazione POSIX 221)
- compat42
- il testo di rimpiazzo durante la sostituzione di modelli tra virgolette
doppie non sottostà alla rimozione delle virgolette, come invece fa
nelle versione successive a bash-4.2
- in modalità posix, le virgolette singole sono considerate speciali
durante l'espansione di porzioni word di una espansione di
parametro tra doppie virgolette, e possono essere utilizzate per
virgolettare una parentesi graffa chiusa o altro carattere speciale
(questo fa parte della interpretazione POSIX 221); in versioni successive,
le virgolette singole non sono speciali all'interno di una espansione di
parola tra doppie virgolette
- compat43
- la shell non stampa un messaggio di avvertimento se viene tentato di usare
un assegnamento interno tra virgolette come argomento di declar (esempio,
declare -a foo='(1 2)'). Versioni successive avvisano che quest'utilizzo
è deprecato
- errori dell'espansione di parola sono considerati non errori non fatali
che causano il fallimento del comando corrente, anche in modalità
posix (il comportamento predefinito è che siano errori fatali che
causano la terminazione della shell)
- durante l'esecuzione di una funzione di shell, lo stato del ciclo
(while/until/etc.) non è reimpostato, quindi break o
continue interni alla funzione agiranno sul ciclo del contesto
invocante. Bash-4.4 e successive reimpostano lo stato del ciclo per
evitare questo comportamento
- compat44
- la shell imposta i valori usati da BASH_ARGV e
BASH_ARGC in modo che possano essere espansi ai
parametri posizionali della shell anche se la modalità di debug
estesa non è attiva
- una subshell eredita i cicli dal contesto invocante, quindi break e
continue faranno uscire la subshell. Bash-5.0 e successiva
reimpostano lo stato del ciclo per evitare questa uscita
- assegnamenti di variabile precedenti a comandi interni quali export
e readonly che impostano attributi avranno effetti sulle variabili
con lo stesso nome dell'ambiente invocante anche se la shell non è
in modalità posix
- compat50
- Bash-5.1 ha cambiato il modo nel quale $RANDOM è
generato e introduce un po' più di aleatorietà. Se
ilvello di compatibilità della shell è impostato a 50 e
precedente, la shell utilizza il metodo di bash-5.0 e versioni precedenti,
quindi impostando un seme per il generatore assegnandolo alla variabile
RANDOM produrrà la stessa sequenza di
bash-5.0
- Se la tabella hash dei comandi è vuota, le versioni di bash
precedenti a bash-5.1 stampavano un messaggio informativo, anche durante
la produzione di output che potesse essere riusato come input. Bash-5.1
sopprime questo messaggio quando viene fornita l'opzione -l.
- compat51
- •
- Il comando interno unset tratta i tentativi di annullare gli indici
di vettore @ e * diversamente a seconda se il vettore sia
indicizzato o associativo, e diversamente rispetto alle precedenti
versioni.
Se bash è avviata col nome rbash, o l'opzione
-r viene fornita all'invocazione, la shell diventa ristretta. Una
shell ristretta è usata per impostare un ambiente più
controllato di quello della shell standard. Si comporta identicamente a
bash con l'eccezione che quel che segue è o non permesso o non
effettuato:
- cambiare le directory con cd
- impostare o rimuovere i valori di SHELL,
PATH, HISTFILE,
ENV o BASH_ENV
- specificare nomi di comando contenenti una /
- specificare un nome di file contenente una / come argomento al
comando incorporato .
- specificare un nome-file contenente una barra obliqua come argomento al
comando incorporato history
- specificare un nome di file contenente una barra [/] come argomento
all'opzione -p del comando incorporato hash
- importare definizioni di funzione dall'ambiente della shell all'avvio
- analizzare il valore di SHELLOPTS dall'ambiente di shell
all'avvio
- ridirigere l'output usando gli operatori di ridirezione >, >|,
<>, >&, &> e >>
- usare il comando incorporato exec per sostituire la shell con un
altro comando
- aggiungere o eliminare comandi incorporati con le opzioni -f e
-d del comando incorporato enable
- usare il comando incorporato enable per abilitare comandi
incorporati della shell che sono disabilitati
- specificare l'opzione -p al comando incorporato command
- disattivare la modalità ristretta con set +r o shopt -u
restricted_shell.
Queste restrizioni sono imposte dopo aver letto eventuali file di
avvio.
When a command that is found to be a shell script is executed (see
COMMAND EXECUTION above), rbash rimuove ogni
restrizione nella shell creata dalla shell genitrice per eseguire lo
script.
- /bin/bash
- L'eseguibile bash
- /etc/profile
- Il file di inizializzazione generale di sistema, eseguito per le shell di
login
- /etc/bash.bashrc
- Il file di inizializzazione generale di sistema per ogni shell
interattiva
- /etc/bash.bash.logout
- Il file di pulizia della shell di login generale di sistema, eseguito
quando una shell di login termina
- ~/.bash_profile
- Il file di inizializzazione personale, eseguito per le shell di login
- ~/.bashrc
- Il file di inizializzazione individuale per ogni shell interattiva
- ~/.bash_logout
- Il file di pulizia della shell di login individuale, eseguito quando una
shell di login termina
- ~/.bash_history
- Il valore predefinito di HISTFILE, il file nel quale bash salva la
cronologia dei comandi
- ~/.inputrc
- Il file di inizializzazione individuale per readline
Brian Fox, Free Software Foundation
bfox@gnu.org
Chet Ramey, Case Western Reserve University
chet.ramey@case.edu
Se trovate un "bug" in bash, dovreste segnalarlo.
Ma prima, dovreste assicurarvi che sia veramente un "bug", e che
appaia nella versione più recente di bash. L'ultima versione
è sempre disponibile da ftp://ftp.gnu.org/pub/gnu/bash/ e
http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.
Una volta determinato che avete individuato realmente un
"bug", usate il comando bashbug per inviare una notifica
del "bug". Se avete una correzione, siete invitati a inviare anche
quella! Suggerimenti e rapporti su "bug" 'filosofici' possono
essere inviati a bug-bash@gnu.org o inviati al newsgroup su Usenet
gnu.bash.bug.
TUTTI i rapporti sui "bug" dovranno includere:
- Il numero di versione di
bash
- L'hardware e il
sistema operativo
- Il compilatore usato per
compilare
- Una descrizione del
comportamento anomalo
- Un breve script o `ricetta' che
produca il "bug"
bashbug inserisce le prime tre voci automaticamente nel
modello che fornisce per compilare una notifica di "bug".
Commenti e notifiche su "bug" riguardanti questa pagina
di manuale dovranno essere indirizzati a chet.ramey@case.edu.
È troppo grande e troppo lenta.
Vi sono alcune sottili differenze tra bash e le versioni
tradizionali di sh, soprattutto per via delle specifiche
POSIX.
In alcuni casi gli alias possono essere causa di confusione.
Comandi incorporati della shell e funzioni non sono
sospendibili/riavviabili.
Comandi composti e sequenze di comandi nella forma di `a ; b ; c'
non sono trattati in modo completamente corretto quando viene richiesta la
sospensione di un processo. Quando un processo viene sospeso, la shell
esegue immediatamente il comando che lo segue immediatamente. Basta mettere
una sequenza di comandi fra parentesi per forzarla in una subshell, che
può essere sospesa come se fosse un'unica entità.
Le variabili vettore non possono essere esportate (per il
momento).
Ci può essere solo un coprocesso attivo alla volta.
La traduzione italiana di questa pagina di manuale è stata
creata da Augusto Lenardi <augusto@comune.modena.it>, Antonio Giovanni
Colombo <azc100@gmail.com>, Silvano Sallese <silvano@pluto.it>,
Marco Curreli <marcocurreli@tiscali.it> e Giuseppe Sacco
<eppesuig@debian.org>
Questa traduzione è documentazione libera; leggere la
GNU General
Public License Versione 3 o successiva per le condizioni di copyright.
Non ci assumiamo alcuna responsabilità.
Per segnalare errori nella traduzione di questa pagina di manuale
inviare un messaggio a
pluto-ildp@lists.pluto.it.