Provided by:
manpages-it_2.80-3_all 
NOME
bash - GNU Bourne-Again SHell
SINTASSI
bash [opzioni] [file]
COPYRIGHT
Bash is Copyright (C) 1989-2005 by the Free Software Foundation, Inc.
DESCRIZIONE
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 per default.
OPZIONI
In aggiunta alle opzioni della shell di un solo carattere documentate
nella descrizione del comando incorporato set, quando è invocata bash
interpreta le seguenti opzioni:
-c stringa
Se è presente l’opzione -c, allora i comandi sono letti da
stringa. Se vi sono argomenti dopo la stringa, essi sono
assegnati ai parametri posizionali, partendo da $0.
-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.
-D Una lista di tutte le stringhe fra virgolette preceduta da $
è stampata sullo standard output. Queste sono le stringhe
che sono soggette a traduzione di linguaggio quando la
localizzazione corrente non è C o POSIX. Questo implica
l’opzione -n; nessun comando verrà eseguito.
[-+]O [shopt_option]
shopt_option è una delle opzioni di shell accettate dal
comando incorporato shopt (si veda COMANDI INCORPORATI DELLA
SHELL più avanti). Se shopt_option è presente, -O imposta il
valore di quella opzione; +O lo rimuove. Se shopt_option 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 di file e argomenti. Un argomento di - è
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) e il tracciamento delle funzioni di shell (si veda
la descrizione dell’opzione -o functrace al comando incorporato
set 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 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 default bash
legge questi file quando è invocata come shell di login (si veda
INVOCAZIONE più avanti).
--norc Non legge né esegue il file personale di inizializzazione
~/.bashrc se la shell è interattiva. Questa opzione è attiva
per default se la shell è invocata come sh.
--posix
Cambia il comportamento di bash, dove le operazioni di default
differiscono dallo standard POSIX, in modo da corrispondere alla
(modalità posix) standard.
--ristretta
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.
ARGOMENTI
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 cerca le directory in PATH per lo
script.
INVOCAZIONE
Una shell di login è una in cui il cui primo carattere dell’argomento
zero è un -, o una che venga avviata con l’opzione --login.
Una shell è detta interattiva se è stata avviata senza argomenti
diversi dalle opzioni 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 di file come
descritto più avanti sotto 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 esce, 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 ~/.bashrc, se quel file esiste. Ciò
può essere inibito utilizzando l’opzione --norc . L’opzione --rcfile
file forza bash a leggere ed eseguire comandi da file invece che da
~/.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 del
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 dal demone di
shell remota, usualmente rshd. Se bash determina che viene eseguito da
rshd, legge ed esegue comandi da ~/.bashrc, se quel file esiste ed è
leggibile. 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 rshd
solitamente non invoca la shell con queste opzioni o non permette 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, la variabile SHELLOPTS , se esiste
nell’ambiente, viene ignorata, e l’id effettivo dell’utente è impostata
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.
DEFINIZIONI
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:
| & ; ( ) < > spazio tab
operatore di controllo
Un token che realizza una funzione di controllo. È uno dei
seguenti simboli:
|| & && ; ;; ( ) | <newline>
PAROLE RISERVATE
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 semplice (si veda
GRAMMATICA DELLA SHELL più avanti) o la terza parola di un comando case
o di un comando for :
! case do done elif else esac fi for function if in select then until
while { } time [[ ]]
GRAMMATICA DELLA SHELL
Comandi semplici
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.
Pipeline
Una pipeline è una sequenza di uno o più comandi separati dal carattere
|. Il formato per una pipeline è:
[time [-p]] [ ! ] comando [ | comando2 ... ]
Lo standard output di comando è connesso attraverso una pipe allo
standard input di comando2. Questa connessione è effettuata prima di
qualsiasi ridirezione specificata dal comando (si veda RIDIREZIONE più
avanti).
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. 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.
Ogni comando in una pipeline è eseguito come un processo separato (cioè
in una subshell).
Liste
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 dei comandi può essere usata in una lista 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. 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.
Gli operatori di controllo && e â”│â”│ denotano liste AND e liste OR,
rispettivamente. Una lista AND ha la forma
comando1 && comando2
comando2 è eseguito se, e solo se, comando1 ritorna uno stato d’uscita
di zero.
Una lista OR ha la forma
comando1 â”│â”│ comando2
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.
Comandi composti
Un comando composto è uno dei seguenti:
(lista)
lista è eseguita in un ambiente di subshell (si veda AMBIENTE DI
ESECUZIONE DEI COMANDI più avanti). Assegnamenti di variabile 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.
((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. Questo è esattamente
equivalente a let "espressione".
[[ 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 vengono effettuate. Gli
operatori condizionali come -f devono essere senza apici per
essere riconosciuti come primitive.
Quando vengono usati gli operatori == e !=, la stringa alla
destra dell’operatore è considerato un modello ed è confrontata
in accordo con le regole descritte più avanti sotto Modelli di
ricerca. 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 negli altri casi. Ogni parte del modello può essere quotato
per forzarlo a essere individuato 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 e confrontata come tale (come in regex(3)). Il valore di
ritorno è 0 se la stringa corrisponde al modello, e 1 negli
altri casi. 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. Substringhe individuate tramite
subespressioni fra parentesi all’interno dell’espressione
regolare sono salvate nella variabile array BASH_REMATCH.
L’elemento di BASH_REMATCH con indice 0 è la porzione della
stringa corrispondente all’intera espressione regolare.
L’elemento di BASH_REMATCH con indice n è la porzione della
stringa corrispondente alla subespressione fra parentesi nth.
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 in parola è 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 risultano in una lista vuota, non è eseguito
alcun comando, e lo stato di ritorno è 0.
for (( expr1 ; expr2 ; expr3 )) ; do lista ; done
Prima viene valutata l’espressione aritmetica expr1 in accordo
con le regole descritte più avanti sotto VALUTAZIONE ARITMETICA.
Viene quindi valutata ripetutamente l’espressione aritmetica
expr2 finché non assume il valore zero. Ogni volta che expr2 è
diverso da zero, lista viene eseguita e l’espressione aritmetica
expr3 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 la in parola
è omessa, sono stampati i parametri posizionali (si veda
PARAMETRI più avanti). È poi mostrato il prompt PS3 ed è letta
una riga dallo standard input. Se la riga è contrassegnata da
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. 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 prova a confrontarla, di
volta in volta, con ognuno dei modelli, usando le stesse regole
di confronto dell’espansione di percorso (si veda Espansione di
percorso più avanti). La parola è espansa usando espansione
della tilde, espansione di parametro e di variabile,
sostituzione aritmetica, sostituzione di comando, sostituzione
di processo e rimozione dei simboli di quotatura. Ogni modello
esaminato è espanso usando espansione della tilde, espansione di
parametro e di variabile, sostituzione aritmetica, sostituzione
di comando e sostituzione di processo. 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
a essa abbinata. Dopo il primo confronto riuscito, non ne viene
tentato nessun altro. Lo stato d’uscita è 0 se nessun modello
corrisponde. Altrimenti, esso è lo stato d’uscita dell’ultimo
comando eseguito in lista.
if lista then lista [ elif lista then lista ] ... [ else lista ] fi
La lista 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 do lista done
until lista do lista done
Il comando while esegue ripetutamente la lista dopo do finché
l’ultimo comando in lista ritorna uno stato di uscita di zero.
Il comando until è identico al comando while, con la sola
differenza che il risultato del test è negato; la lista do è
eseguita finché l’ultimo comando in lista 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 nella
lista do o zero se non ne è stato eseguito alcuno.
Definizioni della funzione di shell
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:
[ function ] nome () comando-composto [ridirezione]
Qui sopra si definisce una funzione chiamata nome. 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. comando-composto è eseguito
ogni volta che nome è specificato come nome di un comando
semplice. Ogni ridirezione (si veda RIDIREZIONI 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).
COMMENTI
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 DI 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 per default nelle shell interattive.
QUOTATURA
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.
Un backslash (\) non quotato è il carattere di protezione. Esso
attribuisce il valore letterale al successivo carattere, con
l’eccezione di <newline>. Se vi è una coppia \<newline> , e il
backslash non è quotato, il \<newline> è trattato come una
continuazione di riga (cioè, è rimosso dal flusso di input e viene
realmente ignorato).
Racchiudendo dei caratteri in apostrofi si conserva il valore letterale
di ogni carattere all’interno degli apostrofi. Un apostrofo non può
essere inserito tra apostrofi, nemmeno preceduto da un backslash.
Racchiudere caratteri tra virgolette conserva il valore letterale di
tutti i caratteri all’interno, con le eccezioni di $, â€â€˜, \, e, quando
l’espansione della cronologia è abilitata, !. I caratteri $ e â€â€˜
conservano il loro significato speciale anche tra virgolette. Il
backslash mantiene il suo significato speciale solo quando seguito da
uno dei seguenti caratteri: $, â€â€˜, ", \ o <newline>. Le virgolette
possono essere contenute in una stringa fra virgolette facendole
precedere da un backslash. Se abilitata, l’espansione della cronologia
viene effettuata a meno che un ! tra virgolette non venga protetto da
un backslash. Il backslash che precede il ! non viene rimosso.
I parametri speciali * e @ hanno un significato speciale quando sono
tra virgolette (si veda PARAMETRI più avanti).
Parole della forma $'stringa' sono trattate in modo speciale. La
parola espande in stringa, coi caratteri protetti da un backslash
sostituiti come specificato dallo standard ANSI C. Le sequenze di
protezione tramite backslash, se presenti, sono decodificate come
segue:
\a avviso (segnale acustico)
\b backspace
\e un carattere di escape
\f salto pagina
\n codice di fine riga (newline)
\r carriage return
\t tabulazione orizzontale
\v tabulazione verticale
\\ backslash
\' apostrofo
\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)
\cx un carattere control-x
Il risultato espanso è racchiuso fra apostrofi come se il segno del
dollaro non fosse presente.
Una stringa fra virgolette preceduta dal segno del dollaro ($) causa la
traduzione della stringa conformemente alla localizzazione corrente.
Se la localizzazione corrente è C o POSIX, il segno del dollaro viene
ignorato. Se la stringa è tradotta e sostituita, la sostituzione è fra
virgolette.
PARAMETRI
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 DI 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
nome=[valore]
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 non è effettuata, con l’eccezione di "$@"
come spiegato più avanti sotto Parametri speciali. L’espansione di
percorso non è effettuata. Le istruzioni di assegnamento possono anche
apparire come argomenti per i comandi incorporati alias, declare,
typeset, export, readonly e local .
Nel contesto in cui un’istruzione di assegnamento sta assegnando un
valore a una variabile di shell o a un indice di array, l’operatore +=
può essere usato per accodare o aggiungere al precedente valore della
variabile. 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 array usando assegnamenti composti (si veda Array più
avanti), il valore della variabile non è rimosso (com’è quando si usa
=), e nuovi valori sono aggiunti alla fine dell’array iniziando dal
massimo indice di array aumentato di uno. Quando applicata a una
variabile valutata come stringa, valore è espanso e accodato al valore
della variabile.
Parametri posizionali
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).
Parametri speciali
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 avviene tra 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 annullato, 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.
Quando l’espansione avviene tra virgolette, ogni parametro si
espande in una parola separata. Cioè, "$@" è equivalente a "$1"
"$2" ... Se l’espansione fra 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 della pipeline eseguita più recentemente
senza rilasciare il controllo del terminale.
- Si espande nei flag di opzione correnti come specificato in base
alla chiamata, 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 comando in background
(asincrono) più recentemente eseguito.
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 percorso usato per chiamare bash,
come dato dall’argomento zero.
_ All’avvio della shell, impostato al nome di percorso assoluto
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, 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.
Variabili di shell
Le seguenti variabili sono impostate dalla shell:
BASH Si espande al nome completo usato per chiamare questa istanza di
bash.
BASH_ARGC
Una variabile di array 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)
BASH_ARGV
Una variabile di array 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)
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.
BASH_EXECUTION_STRING
L’argomento per il comando all’invocazione dell’opzione -c.
BASH_LINENO
Una variabile array i cui elementi sono i numeri di riga nei
file di origine corrispondenti a ciascun elemento di FUNCNAME.
${BASH_LINENO[$i]} è il numero di riga nel file di origine dove
${FUNCNAME[$ifP]} è stato chiamato. Il nome del file di origine
corrispondente è ${BASH_SOURCE[$i]}. Usare LINENO per ottenere
il numero di riga corrente.
BASH_REMATCH
Una variabile array i cui elementi sono assegnati dall’operatore
binario =~ al 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 subespressione fra
parentesi. La variabile è in sola lettura.
BASH_SOURCE
Una variabile array i cui elementi sono i nomi dei file da cui
provengono gli elementi nella variabile array FUNCNAME.
BASH_SUBSHELL
Incrementato di uno ogni volta che una subshell o un ambiente di
subshell è stato creato dalla shell originale. Il valore
iniziale è 0.
BASH_VERSINFO
Una variabile array in sola lettura i cui elementi danno
informazioni sulla versione di quest’istanza di bash. I valori
assegnati ai membri dell’array sono come segue:
BASH_VERSINFO[0] Il numero di versione principale(la
release).
BASH_VERSINFO[1] Il numero di versione secondario (la
versione).
BASH_VERSINFO[2] Il livello di aggiornamento tramite
patch.
BASH_VERSINFO[3] La versione di compilazione.
BASH_VERSINFO[4] Lo stato della release (ad es., beta1).
BASH_VERSINFO[5] Il valore di MACHTYPE.
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_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_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 array (si veda Array più avanti) che è composta
dalle singole parole nella riga di comando corrente. Le parole
sono divise anche dai metacaratteri della shell poiché
l’analizzatore della shell li considererebbe a parte. Questa
variabile è disponibile solo nelle funzioni di shell e comandi
esterni invocati dai servizi di completamento programmabile (si
veda Programmable Completion più avanti).
DIRSTACK
Una variabile array (si veda Array 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 array 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.
EUID Espande all’ID-utente effettivo dell’utente corrente,
inizializzata all’avvio della shell. Questa variabile è in sola
lettura.
FUNCNAME
Una variabile array 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 è
"main". Questa variabile esiste solo quando è in esecuzione una
funzione di shell. Assegnamenti a FUNCNAME non hanno alcun
effetto e ritornano uno stato di errore. Se FUNCNAME viene
annullata, perde le sue proprietà speciali, anche se è poi
reimpostata.
GROUPS Una variabile array contenente l’elenco dei gruppi dei quali è
membro l’utente corrente. Assegnamenti a GROUPS non hanno alcun
effetto e ritornano uno stato di errore. 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. 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 di default è 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 di
default è dipendente dal sistema.
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 COMANDI INCORPORATI 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 di default è
dipendente dal sistema.
PIPESTATUS
Una variabile array (si veda Array 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, viene generato
un numero intero casuale fra 0 e 32767. La sequenza di numeri
casuali può essere inizializzata assegnando un valore a RANDOM.
Se RANDOM viene annullata, perde le sue proprietà speciali,
anche se è poi reimpostata.
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 dalla chiamata 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. 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 DI 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 È incrementato di uno ogni volta che una istanza di bash viene
avviata.
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 di default a una variabile; questi casi sono elencati
più avanti.
BASH_ENV
Se questo parametro è impostato quando bash sta eseguendo uno
script di shell, il suo valore è interpretato come un nome di
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 di file. PATH non è
usato per cercare il nome di file risultante.
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".
COLUMNS
Usato dal comando incorporato select per determinare il numero
di colonne del terminale nella stampa delle liste di selezione.
Automaticamente re-impostata al ricevimento di un segnale
SIGWINCH.
COMPREPLY
Una variabile array 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).
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.
FCEDIT L’editor di default per il comando incorporato fc.
FIGNORE
Una lista di suffissi, separati da due punti, da ignorare quando
si effettua il completamento del nome di file (si veda READLINE
più avanti). Un nome di file il cui suffisso corrisponde a una
delle voci in FIGNORE è escluso dalla lista dei nomi di file
individuati. Un valore di esempio è ".o:~".
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
viene annullato 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 predeterminato è
~/.bash_history. Se è annullato la cronologia dei comandi non è
salvata al termine di una shell interattiva.
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, rimuovendo le voci più
vecchie, per contenere non più di quel numero di righe. Il
valore di default è 500. Il file della cronologia è inoltre
troncato a questa dimensione dopo la scrittura al termine di una
shell interattiva.
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 un backslash; il backslash è rimosso
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.
HISTSIZE
Il numero di comandi da memorizzare nella cronologia dei comandi
(si veda CRONOLOGIA più avanti). Il valore di default è 500.
HISTTIMEFORMAT
Se questa variabile è impostata e non nulla, il suo valore è
usato come stringa di formato per strftime(3) per stampare
l’informazione "data e ora" 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.
HOME La home directory dell’utente corrente; l’argomento di default
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, bash tenta di leggere
/etc/hosts per ottenere la lista dei possibili completamenti del
nome di host. Quando HOSTFILE viene annullato, 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 di default è
‘‘<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 di default è 10. Se non esiste, EOF indica la
fine dell’input per la shell.
INPUTRC
Il nome di file per il file di avvio di readline che prevale sul
valore di default che è ~/.inputrc (si veda READLINE più
avanti).
LANG Usata per determinare la categoria di localizzazione per
qualsiasi categoria non specificatamente specificata 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 virgolette precedute da un $.
LC_NUMERIC
Questa variabile determina la categoria di localizzazione usata
per la formattazione dei numeri.
LINES Usato dal comando incorporato select per determinare il numero
di linee del terminale nella stampa delle liste di selezione.
Automaticamente re-impostata al ricevimento di un segnale
SIGWINCH.
MAIL Se questo parametro è impostato a un nome di file e la variabile
MAILPATH non è impostata, bash informa l’utente dell’arrivo di
posta nel file specificato.
MAILCHECK
Specifica la frequenza (in secondi) con cui bash controlla la
posta. Il valore di default è 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 di 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 del 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 fornisce un valore di default per questa variabile, 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 di default è dipendente dal sistema ed è
impostato dall’amministratore che installa bash. Un valore
frequente è
‘‘/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin’’.
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.
PROMPT_COMMAND
Se impostato, il valore è eseguito ogni volta come un comando
prima di scrivere il prompt primario.
PS1 Il valore di questo parametro è espanso (si veda STRINGHE DI
PROMPT più avanti) e usato come stringa del prompt primario. Il
valore di default è‘‘\s-\v\$ ’’.
PS2 Il valore di questo parametro è espanso allo stesso modo di PS1
ed è usato come stringa di prompt secondario. Il valore di
default è ‘‘> ’’.
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 di PS4 è
replicato tante volte, quanto necessario, per indicare livelli
multipli di indirezione. Il valore di default è ‘‘+ ’’.
SHELL In questa variabile d’ambiente è contenuto il 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 a 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%3lS'. Se il valore è
nullo, non viene mostrata alcuna informazione di tempo. Una
newline finale è aggiunta quando la stringa di formato è
visualizzata.
TMOUT Se impostato a un valore maggiore di zero, TMOUT è trattato come
il tempo limite (timeout) di default per il comando incorporato
read. Il comando select viene terminato se non riceve input
dopo TMOUT secondi quando l’input è chiesto a 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. Se l’input non arriva Bash termina dopo aver
aspettato per quel numero di secondi.
TMPDIR Se impostato, 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
impostato al valore exact, la stringa fornita deve essere
esattamente uguale al nome di un job fermo; se impostato a
substring, la stringa fornita deve combaciare con una substringa
del nome di un job sospeso. Il valore substring fornisce
funzionalità analoghe all’identificatore del job %? (si veda
JOB CONTROL più avanti). Se impostato 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 di default è ‘^’. 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.
Array
Bash fornisce variabili array monodimensionali. Ogni variabile può
essere usata come un array; il comando incorporato declare dichiara
esplicitamente un array. Non c’è un limite massimo per la dimensione
di un array, né alcuna richiesta che gli elementi siano indicizzati o
assegnati in modo contiguo. Gli array sono indicizzati usando numeri
interi e cominciano con l’indice zero.
Un array è creato automaticamente se a una variabile qualsiasi è
assegnato un valore usando la sintassi nome[subscript]=valore. Il
subscript viene trattato come un’espressione aritmetica che deve
risultare un numero maggiore o uguale a zero. Per dichiarare
esplicitamente un array, usare declare -a nome (si veda COMANDI
INCORPORATI DI SHELL più avanti). È anche accettato declare -a
nome[subscript] ; il subscript viene ignorato. Per una variabile array
possono essere specificati degli attributi utilizzando i comandi
incorporati declare e readonly . Ogni attributo si applica a tutti gli
elementi di un array.
Agli elementi dell’array vengono assegnati valori usando assegnamenti
composti della forma nome=(valore1 ... valoren), dove ogni valore è
della forma [subscript]=stringa. È richiesto solo stringa. Se vengono
fornite le parentesi opzionali e il subscript, 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. Questa sintassi è accettata anche dal comando
incorporato declare . Elementi singoli di un array possono essere
assegnati con la sintassi nome[subscript]=valore introdotta più sopra.
Qualsiasi elemento di un array può essere referenziato con
${nome[subscript]}. Le parentesi sono richieste per evitare conflitti
con l’espansione di percorso. Se subscript è @ o *, la parola espande
a a tutti gli elementi di nome. Questi subscript differiscono solo
quando la parola appare inclusa fra virgolette. Se la parola è quotata
con virgolette, ${nome[*]} espande a una singola parola col valore di
ogni elemento dell’array separato dal primo carattere della variabile
speciale IFS , e ${nome[@]} espande ogni elemento di nome come una
parola separata. Quando non c’è l’elemento di array, ${nome[@]} è
espanso alla stringa nulla. Se l’espansione quotata con 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[subscript]} espande alla lunghezza di
${nome[subscript]}. Se subscript è * o @, l’espansione è il numero di
elementi dell’array. Referenziare una variabile array senza
specificare un subscript equivale a referenziare il suo elemento zero.
Il comando incorporato unset è usato per annullare gli array. unset
nome[subscript] annulla l’elemento di array a indice subscript.
Bisogna stare attenti a evitare effetti collaterali indesiderati
causati dalla generazione di un nome di file. unset nome, dove nome è
un array, o unset nome[subscript], dove subscript è * o @, rimuove
l’intero array.
Ciascuno dei comandi incorporati declare, local e readonly accetta
un’opzione -a per specificare un array. Il comando incorporato read
accetta un’opzione -a per assegnare a un array una lista di parole
lette dallo standard input. I comandi incorporati set e declare
mostrano i valori di array in modo che da essere riutilizzabili come
assegnamenti.
ESPANSIONE
L’espansione è effettuata 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 ed espansione di percorso.
L’ordine di espansione è: espansione delle parentesi graffe, espansione
della tilde, espansione di parametro, di variabile e 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.
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 è l’espansione di
‘‘$@’’ e "${nome[@]}" come spiegato sopra (si veda PARAMETRI).
Espansione delle parentesi graffe
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}, dove x e y sono o
numeri interi o caratteri singoli. Se si specificano numeri interi,
l’espressione espande a ogni numero fra x e y, incluso. Se si
specificano caratteri l’espressione espande a ogni carattere
lessicograficamente compreso fra x e y, incluso. Da notare che
entrambi x e y devono essere dello stesso tipo.
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 un backslash 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.
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 consequenza 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).
Espansione della tilde
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.
Espansione di parametro
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 un backslash o da
stringhe quotate, 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 [ossia 10 e oltre], o quando parametro è seguito da un
carattere che non deve essere interpretato come parte del suo
nome.
Se il primo carattere di parametro è un punto esclamativo, è introdotto
un livello di indirezione della variabile. Bash usa il valore della
variabile formata dal resto del parametro come nome di variabile;
questa variabile è poi espansa e quel valore è usato nel resto della
sostituzione, piuttosto che il valore stesso di parametro. Questa è
conosciuta come espansione indiretta. 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
substringa, 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 di default. Se parametro non è impostato o è
nullo, è sostituita l’espansione di parola. Altrimenti, il
valore di parametro è sostituito
${parametro:=parola}
Assegna i valori di default. 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}
Usa un valore alternativo. Se parametro è nullo o è stato
annullato, non è sostituito niente, altrimenti è sostituita
l’espansione di parola .
${parametro:offset}
${parametro:offset:lunghezza}
Espansione di substringa. Espande i caratteri di parametro fino
a lunghezza partendo dal carattere specificato da offset. Se
lunghezza viene omesso, espande alla substringa di parametro
partendo dal carattere specificato da offset. lunghezza e
offset sono espressioni aritmetiche (si veda VALUTAZIONE
ARITMETICA più avanti). lunghezza deve essere un numero
maggiore o uguale a zero. Se offset è un numero minore di zero,
il valore viene usato come un offset dalla fine del valore di
parametro. Se parametro è @, il risultato è un numero di
parametri posizionali pari a lunghezza a partire da offset. Se
parametro è un nome di array indicizzato da @ o *, il risultato
è un numero di elementi dell’array pari a lunghezza a partire da
${parametro[offset]}. Un offset negativo è inteso come relativo
al massimo indice dell’array specificato aumentato di uno.
Notare che un offset negativo dev’essere separato dai due punti
da almeno uno spazio per evitare di essere confuso con
l’espansione di :- . L’indicizzazione della substringa è a base
zero a meno che non vengano usati i parametri posizionali, nel
qual caso l’indicizzazione parte da 1.
${!prefisso*}
${!prefisso@}
Espande ai nomi delle variabili i cui nomi iniziano con
prefisso, separati dal primo carattere della variabile speciale
IFS
${!nome[@]}
${!nome[*]}
Se nome è una variabile di array, espande alla lista degli
indici di array (chiavi) assegnati in nome. Se nome non è un
array, espande a 0 se nome è impostato ed è nullo in caso
contrario. Quando @ è usato e l’espansione appare fra
virgolette, ogni chiave espande a una parola separata.
${#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 array
contrassegnato da * o @, il valore sostituito è il numero di
elementi nell’array.
${parametro#parola}
${parametro##parola}
La parola è espansa per produrre un modello proprio come
nell’espansione di percorso. Se il modello trova una
corrispondenza con l’inizio del valore di parametro, allora il
risultato dell’espansione è il valore espanso di parametro con
il più corto dei modelli che corrispondono cancellato (nel caso
di ‘‘#’’ ) o il più lungo dei modelli che corrispondono
cancellato (nel caso di ‘‘##’’ ). Se parametro è @ o *,
l’operazione di rimozione del modello è applicata di volta in
volta a ogni parametro posizionale, e l’espansione è la lista
che ne risulta. Se parametro è una variabile di array con
indice @ o *, l’operazione di rimozione del modello è applicata
a ognuno degli elementi dell’array, e l’espansione è la lista
risultante.
${parametro%parola}
${parametro%%parola}
La parola è espansa per produrre un modello proprio come
nell’espansione di percorso. 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 di array con indice @ o *, l’operazione di rimozione
del modello è applicata a ognuno degli elementi dell’array, e
l’espansione è la lista risultante.
${parametro/modello/stringa}
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. Se modello comincia con /, tutte le corrispondenze di
modello sono sostituite con stringa. Normalmente viene
sostituita solo la prima corrispondenza. Se modello comincia
con #, deve corrispondere all’inizio del valore espanso di
parametro. Se modello inizia con %, deve corrispondere alla
fine del valore espanso di parametro. Se stringa è nulla, le
corrispondenze di modello sono cancellate e la / che segue
modello può essere omessa. Se parametro è @ o *, l’operazione
di sostituzione è applicata a ognuno dei parametri posizionali,
e l’espansione è la lista risultante. Se parametro è una
variabile di array con indice @ o *, l’operazione di
sostituzione è applicata a ognuno degli elementi dell’array, e
l’espansione è la lista risultante.
Sostituzione di comando
La sostituzione di comando permette che l’output di un comando
rimpiazzi il nome del comando. Vi sono due forme:
$(comando)
o
â€â€˜comandoâ€â€˜
Bash effettua l’espansione eseguendo il comando 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, il backslash conserva il suo significato letterale tranne
quando è seguito da $, â€â€˜ o \. Il primo apice rovesciato non preceduto
da un backslash 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 un carattere backslash di
protezione.
Se la sostituzione appare tra virgolette, la suddivisione in parole e
l’espansione di percorso non sono effettuate sui risultati.
Espansione aritmetica
L’espansione aritmetica permette la valutazione di una espressione
aritmetica e la sostituzione del risultato. Il formato per
l’espansione aritmetica è:
$((espressione))
L’ espressione è trattata come se fosse tra virgolette, ma le
virgolette dentro le parentesi non sono trattate in modo speciale.
Tutti i token dell’espressione sono assoggettati a espansione di
parametro, espansione di stringa, sostituzione di comando e rimozione
dei caratteri di quotatura. 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.
Sostituzione di processo
La sostituzione di processo è supportata su sistemi che supportano le
named pipe (FIFO) o il metodo /dev/fd per denominare i file aperti.
Essa prende la forma di <(lista) o >(lista). La lista di processi è
eseguita con il suo input o output connesso a un FIFO o ad alcuni file
in /dev/fd. 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.
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.
Suddivisione in parole
La shell scandisce il risultato dell’espansione di parametro,
sostituzione di comando ed espansione aritmetica che non si trovano tra
virgolette, per effettuare la suddivisione in parole.
La shell tratta ogni carattere di IFS come un delimitatore, e suddivide
in parole, in corrispondenza con uno di questi caratteri, i risultati
delle altre espansioni. Se il valore di IFS non è impostato o il suo
valore è esattamente <space><tab><newline>, il valore di default,
qualsiasi sequenza di caratteri IFS serve per delimitare le parole. Se
IFS ha un valore diverso da quello di default, allora sequenze di
caratteri di spaziatura space e tab 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("" or '') sono conservati. 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 e
viene rimosso.
È da notare che se non avviene alcuna espansione non viene effettuata
alcuna suddivisione.
Espansione di percorso
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, allora la parola è
considerata come un modello, e sostituita con una lista, in ordine
alfabetico, di nomi di file che corrispondono al modello. Se nessun
nome di file corrispondente viene trovato, e l’opzione di shell
nullglob è disabilitata, 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. 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. 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,
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. I nomi di 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 di file che iniziano con un â€â€˜â€â€˜.â€â€™â€â€™ Per ottenere il
comportamento (usato in precedenti versioni) di ignorare i nomi di file
che iniziano con â€â€˜â€â€˜.â€â€™â€â€™, si deve fare un modello â€â€˜â€â€˜.*â€â€™â€â€™ in GLOBIGNORE.
L’opzione dotglob è disabilitata quando GLOBIGNORE viene annullato.
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. Un
backslash segnala come speciale il carattere che segue; il backslash è
ignorato 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.
? 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 dal valore della variabile di shell
LC_COLLATE, se impostata. Un - può essere specificato
includendolo come primo o ultimo carattere nella lista. Una ]
può essere specificata includendola come primo carattere nella
lista.
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 che descrivono
modelli. Nella descrizione seguente, una pattern-list è una lista di
uno o più modelli separati da una |. Possono essere formati modelli
composti usando uno o più dei seguenti submodelli:
?(pattern-list)
Individua zero o una occorrenza dei modelli specificati
*(pattern-list)
Individua zero o più occorrenze dei modelli specificati
+(pattern-list)
Individua una o più occorrenze dei modelli specificati
@(pattern-list)
Individua uno dei modelli specificati
!(pattern-list)
Individua qualsiasi cosa eccetto uno dei modelli
specificati
Rimozione dei caratteri di quotatura
Dopo le precedenti espansioni, tutte le occorrenze non quotate dei
caratteri \, ' e " non originate da una delle espansioni di cui sopra
sono rimosse.
RIDIREZIONE
Prima che un comando sia eseguito, i suoi input e output possono essere
ridiretti usando una speciale notazione interpretata dalla shell. La
ridirezione può anche essere usata per aprire e chiudere file per
l’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.
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, 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
ls > dirlist 2>&1
dirige sia lo standard output che lo standard error sul file dirlist,
mentre il comando
ls 2>&1 > dirlist
dirige solo lo standard output sul file dirlist, poiché lo standard
error è stato duplicato come standard output prima che lo standard
output fosse ridiretto su dirlist.
Bash manipola parecchi nomi di file specialmente quando sono usati in
ridirezioni, come descritto nella tavola seguente:
/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 una connessione TCP al
socket 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 una connessione UDP al
socket 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.
Ridirezione dellâ€â€™input
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 è:
[n]<parola
Ridirezione dellâ€â€™output
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 è:
[n]>parola
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.
Accodare lâ€â€™output ridiretto
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 è:
[n]>>parola
Ridirezione di standard output e standard error
Bash permette, con questo costrutto, che l’output sia lo standard
output (descrittore di file 1) che quello dello standard error
(descrittore di file 2) siano ridiretti sul file il cui nome risulta
dall’espansione di parola.
Vi sono due formati per ridirigere lo standard output e lo standard
error:
&>parola
e
>&parola
Delle due forme, la prima è quella preferita. Questo è semanticamente
equivalente a
>parola 2>&1
Here Document
Questo tipo di ridirezione istruisce la shell a leggere l’input
dall’input corrente, finché non venga incontrata una riga contenente
solo parola (senza alcun carattere blank dopo la parola stessa). Tutte
le righe lette fino a quel punto sono quindi usate come standard input
per un comando.
Il formato degli here-document è il seguente:
<<[-]parola
here-document
delimitatore
Nessuna espansione di parametro, sostituzione di comando, espansione
aritmetica o espansione di percorso è effettuata su parola. Se un
carattere qualsiasi in parola è quotato, 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. In quest’ultimo
caso, la coppia \<newline> è ignorata, e \ deve essere usata per
quotare i caratteri \, $, e â€â€˜.
Se l’operatore di ridirezione è <<-, tutti i caratteri tab 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.
Here String
Una variante degli here document, il formato è:
<<<parola
La parola è espansa ed è passata al comando come suo standard input.
Duplicazione dei descrittori di file
L’operatore di ridirezione
[n]<&parola
è 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
[n]>&parola
è 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. Come caso
speciale, se n è omesso, e parola non si espande a una o più cifre, lo
standard output e lo standard error sono ridiretti come descritto in
precedenza.
Muovere i descrittori di file
L’operatore di ridirezione
[n]<&cifra-
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
[n]>&cifra-
muove il descrittore di file cifra al descrittore di file n, o allo
standard output (descrittore di file 1) se n non è specificato.
Apertura di descrittori di file per lettura e scrittura
L’operatore di ridirezione
[n]<>parola
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.
ALIAS
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 quotata, 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 DI 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 prima di eseguire qualsiasi comando di quella riga.
Gli alias sono espansi quando un comando è letto, non quando è
eseguito. Perciò, una definizione di alias che appaia sulla una 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 composto. 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.
FUNZIONI
Una funzione di shell, definita come descritto prima sotto 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 ad eccezione della gestione dei segnali DEBUG e RETURN (si
veda la descrizione del comando incorporato trap sotto COMANDI
INCORPORATI DI 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).
Variabili locali alla funzione possono essere dichiarate con il comando
incorporato local. Di solito, le variabili e i loro valori sono
condivisi tra la funzione e il suo chiamante.
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
subshell automaticamente le trovino 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 . Da
notare che funzioni e variabili di shell aventi lo stesso nome possono
risultare in più elementi con lo stesso nome nell’ambiente passato alle
shell figlie. Bisogna fare attenzione ai casi in cui questo può
causare un problema.
Le funzioni possono essere ricorsive. Nessun limite è posto sul numero
di chiamate ricorsive.
VALUTAZIONE ARITMETICA
La shell permette di calcolare espressioni aritmetiche, sotto certe
circostanze (si veda i comandi incorporati let e declare 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
++id --id
pre-incremento e pre-decremento di una variabile
- + meno e più unari
! ~ 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
expr?expr:expr
operatore condizionale
= *= /= %= += -= <<= >>= &= ^= |=
assegnamento
expr1 , expr2
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. Una
variabile di shell non ha bisogno essere stata dichiarata intera per
poter essere usata in un’espressione.
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 base è un numero
decimale tra 2 e 64 che definisce la base aritmetica, e n è un numero
espresso in quella base. Se base# è omessa, allora è usata la base 10.
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.
ESPRESSIONI CONDIZIONALI
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. Le espressioni
sono formate dalle seguenti primitive unarie o binarie. 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.
-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 [non una directory o
altro].
-g file
Vero se file esiste ed è impostato il suo bit set-group-id.
-h file
Vero se file esiste ed è un collegamento simbolico [symbolic
link].
-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.
-O file
Vero se file esiste ed è posseduto dall’id effettivo
dell’utente.
-G file
Vero se file esiste ed è posseduto dal gruppo effettivo
dell’utente.
-L file
Vero se file esiste ed è un collegamento simbolico.
-S file
Vero se file esiste ed è un socket.
-N file
Vero se file esiste ed è stato modificato dopo l’ultima volta in
cui è stato letto.
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.
file1 -ef file
Vero se file1 e file2 si riferiscono allo stesso dispositivo e
hanno lo stesso numero di inode.
-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.
-z stringa
Vero se la lunghezza di stringa è 0.
stringa
-n stringa
Vero se la lunghezza di stringa è diversa da zero.
stringa1 == stringa2
Vero se le stringhe sono uguali. = può essere usato invece che
== per aderire rigorosamente allo standard POSIX.
stringa1 != stringa2
Vero se le stringhe non sono uguali.
stringa1 < stringa2
Vero se stringa1 precede come ordine stringa2
lessicograficamente nella localizzazione corrente.
stringa1 > stringa2
Vero se stringa1 segue come ordine stringa2 lessicograficamente
nella localizzazione corrente.
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.
ESPANSIONE DI COMANDO SEMPLICE
Quando viene eseguito un comando semplice la shell effettua le seguenti
espansioni, assegnamenti e ridirezioni, da sinistra a destra.
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. 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.
ESECUZIONE DI UN COMANDO
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 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, ed è generata una
subshell 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 dei nomi completi di
comando ricordati dalla shell genitrice (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.
AMBIENTE DI ESECUZIONE DEL COMANDO
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 per default 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].
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].
Se un comando è invocato da un & e il job-control non è attivo, lo
standard input di default per il comando è il file vuoto /dev/null.
Altrimenti il comando invocato eredita i descrittori di file della
shell chiamante come modificati dalle ridirezioni.
AMBIENTE
Quando viene invocato un programma gli viene dato un array 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.
STATO Dâ€â€™USCITA
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.
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.
SEGNALI
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.
La shell esce per default 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.
JOB-CONTROL
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 di sistema 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:
[1] 25647
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 foreground è
permesso di leggere o scrivere sul terminale. Ai processi in
background che tentano di leggere (scrivere) sul terminale è inviato un
segnale SIGTTIN (SIGTTOU) dal driver del terminale, 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 foreground, 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 un nome di job. 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 substringa che appare nella sua riga di
comando. Per esempio, %ce si riferisce a un job ce sospeso. 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 substringa
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 foreground o avviato
in background. Il job precedente può essere referenziato usando %-.
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
foreground: %1 è un sinonimo per â€â€˜â€â€˜fg %1â€â€™â€â€™, che porta il job 1 dal
background al foreground. 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, la shell
stampa un messaggio di avvertimento. 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 i job sospesi vengono terminati.
STRINGHE DI PROMPT
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
permette di personalizzare queste stringhe di prompt inserendo un certo
numero di caratteri speciali preceduti da backslash che sono
decodificati come segue:
\a un carattere ASCII di allarme (07) [campanello o bip]
\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 [nome all’interno della directory] del
terminale in cui è eseguita la shell
\n newline [su una nuova linea, ossia il prompt può essere
su più linee]
\r carriage return [a inizio linea, ma non su una nuova
linea]
\s il nome della shell, il basename [nome all’interno della
directory] 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 la directory di lavoro corrente con HOME abbreviato con
una tilde
\W il basename della directory di lavoro corrente, 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
\\ un backslash
\[ 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 sotto COMANDI INCORPORATI DELLA SHELL ).
READLINE
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. Per default, 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. Per
chiudere l’interfaccia per l’editor di riga dopo l’esecuzione della
shell utilizzare l’opzione -B +o emacs o +o vi del comando incorporato
set (si veda COMANDI INCORPORATI DELLA SHELL più avanti).
Notazione readline
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.
Inizializzazione di Readline
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 di default è ~/.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 di default 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).
Associazioni di tasti readline
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
\\ backslash
\" 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 il backslash:
\a avviso (segnale acustico)
\b backspace
\d cancella [delete - tasto Del o Canc]
\f form feed [salto pagina]
\n newline [nuova linea]
\r carriage return [a inizio linea]
\t tabulazione orizzontale
\v tabulazione verticale
\nnn il carattere a otto bit il cui valore è rappresentato dal
valore ottale nnn (da una a tre cifre ottali)
\xHH il carattere a otto bit il cui valore è rappresentato dal
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 essere [che sia] un nome di funzione. Nel corpo
della macro, i segni di protezione backslash descritti prima vengono
espansi. Il backslash 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 . Il modo di editing
può essere cambiato durante l’uso interattivo usando l’opzione -o del
comando incorporato set (si veda COMANDI INCORPORATI DELLA SHELL più
avanti).
Variabili readline
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-di-variabile valore
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 di default sono:
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.
comment-begin (â€â€˜â€â€˜#â€â€™â€â€™)
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-ignore-case (Off)
Se impostato a On, readline effettua l’individuazione dei nomi
di file e il completamento seza distinguere le lettera maiuscole
dalle lettere minuscole.
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,
all’utente viene chiesto se desidera o meno vederli; altrimenti
essi sono semplicemente elencati sul terminale.
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 prefisso meta).
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.
editing-mode (emacs)
Controlla se readline parte con un insieme di associazioni di
tasti simile a emacs o vi. editing-mode può essere impostato a
emacs o a vi.
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.
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.
horizontal-scroll-mode (Off)
Quando impostato a On, richiede a readline di usare una sola
riga per la visualizzazione, effettuando lo scroll dell’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.
input-meta (Off)
Se impostato a On, readline abilita l’input a otto bit (cioè,
non toglie il bit più alto dai caratteri che legge),
indipendentemente da quello che il terminale dichiara di
supportare. Il nome meta-flag è un sinonimo per questa
variabile.
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 and 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 di default è emacs; il valore di editing-mode
determina anche la mappa dei tasti di default.
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 di file, a meno che il
‘.’ iniziale non sia fornito dall’utente come parte del nome di
file da completare.
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.
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.
show-all-if-ambiguous (Off)
Questo cambia il comportamento di default 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 di default 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.
visible-stats (Off)
Se impostato a On, un carattere che denota un tipo di file come
riportato da stat(2) è accodato al nome di file durante
l’elencazione dei possibili completamenti.
Costrutto condizionale di readline
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 al modo di editing, al terminale in uso o all’applicazione
che fa uso di readline. Il testo da verificare arriva fino alla
fine della riga; 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 a sun di essere trovare corrispondenza sia con
sun che con sun-cmd, ad esempio.
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
$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 di file come argomento e
legge comandi e associazioni da quel file. Per esempio, la
seguente direttiva legge /etc/inputrc:
$include /etc/inputrc
Ricerca
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 è stata
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.
Nomi di comando readline
La seguente è una lista di nomi dei comandi e delle sequenze di tasti
di default a cui essi sono collegati. Nomi di comando senza una
sequenza di tasti collegata a essi sono scollegati per default. 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.
Comandi di movimento
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).
clear-screen (C-l)
Pulisce lo schermo lasciando la riga corrente in cima allo
schermo. Con un argomento, rinfresca la riga corrente senza
ripulire lo schermo.
redraw-current-line
Rinfresca la riga corrente.
Comandi per manipolare la cronologia
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.
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.
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,
si comporta esattamente come yank-nth-arg. Chiamate consecutive
a yank-last-arg percorrono l’elenco della cronologia
all’indietro, inserendo ogni volta l’ultimo argomento di ogni
riga. I servizi dell’espansione della cronologia sono usati per
estrarre l’ultimo argomento, 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
effettua l’espansione degli alias e della cronologia così come
tutte le espansioni di parola 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
Effettua l’espansione della cronologia e degli alias sulla riga
corrente.
insert-last-argument (M-., M-_)
Un sinonimo di yank-last-arg.
operate-and-get-next (C-o)
Accetta la riga corrente per l’esecuzione e prende dalla
cronologia la riga successiva a quella corrente, per l’editing.
Qualsiasi argomento viene ignorato.
edit-and-execute-command (C-xC-e)
Invoca un editor sulla riga di comando corrente ed esegue il
risultato come comandi di shell. Bash tenta di invocare
$FCEDIT, $EDITOR e emacs come editor, in quest’ordine.
Comandi per cambiare il testo
delete-char (C-d)
Cancella il carattere nel punto del cursore. Se il punto è
all’inizio della riga, non vi è alcun carattere nella riga, e
l’ultimo carattere battuto non era associato a delete-char,
allora ritorna EOF.
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 per default.
Eliminazione e recupero
kill-line (C-k)
Elimina il testo dal punto del cursore fino alla fine della
riga.
backward-kill-line (C-x C-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.
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
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.
Argomenti numerici
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 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.
Completamento
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 nessuna di questi produce una risultato, viene
tentato il completamento del nome di 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.
menu-complete
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 la
lista. Questo comando è da associare normalmente al tasto TAB,
però non è associato per default.
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. Questo comando non è associato per
default.
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 di 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 di 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 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 di file e insericse la lista
dei possibili completamenti racchiusi tra parentesi graffe,
rendendo la lista disponibile per la shell (si veda Espansione
delle parentesi graffe sopra).
Macro di tastiera
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.
Varie
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 editing ed emette il segnale
acustico del terminale (dipendente dall’impostazione di
bell-style).
do-uppercase-version (M-a, M-b, M-x, ...)
Se il carattere x battuto assieme al tasto Meta è minuscolo,
esegue il comando collegato al corrispondente carattere
maiuscolo.
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.
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 di default 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.
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 di 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.
Completamento programmabile
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 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.
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 di default 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 di 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 file 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 e COMP_POINT 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 è il nome del comando i cui argomenti sono stati completati,
il secondo argomento è la parola da completare e il terzo argomento è
la parola che precede la parola da completare sulla riga di comando
corrente. Non viene effettuata 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 di array COMPREPLY .
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. Un backslash può essere usato 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 un backslash di protezione; il backslash
viene rimosso 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.
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.
Per default, se viene trovato un comspec, qualsiasi cosa generi viene
restituito al codice di completamento come insieme completo di
completamenti possibili. I completamenti di bash di default non
vengono tentati, e la readline di default del completamento del nome di
file è disabilitata. Se l’opzione -o bashdefault era stata fornita a
complete al momento della definizione di comspec, i completamenti di
default 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 di default di
readline vengono effettuati se il comspec (e, se tentato, il
completamento di default 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.
CRONOLOGIA
Quando l’opzione - 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 (per default 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 (per default ~/.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 . Quando
una shell interattiva 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. Dopo il salvataggio
della cronologia il file della cronologia è troncato per contenere non
più di HISTFILESIZE righe. Se HISTFILESIZE non è impostato, nessun
troncamento viene effettuato.
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 l’editing della riga
di comando, sono disponibili comandi di ricerca in ciascun modo di
editing 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.
ESPANSIONE DELLA CRONOLOGIA
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
per default 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 per default.
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.
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 che quando è letta in input, così
che più parole separate da metacarattericircondate 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 è ! per default. Solo il backslash (\) e gli apostrofi
possono quotare il carattere di espansione della cronologia.
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 ), 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 editing 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 editing 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).
Designatore di evento
Un designatore di evento è un riferimento a un elemento di riga di
comando nella lista 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 la riga di comando corrente meno n.
!! Designa il comando precedente. Questo è un sinonimo per ‘!-1’.
!stringa
Designa il comando più recente che inizia con stringa.
!?stringa[?]
Designa il comando più recente che contiene stringa. Il ?
finale può essere omesso se stringa è seguita immediatamente da
un codice di fine riga (newline).
^string1^string2^
Sostituzione rapida. Ripete l’ultimo comando, rimpiazzando
stringa1 con stringa2. Equivalente a
‘‘!!:s/stringa1/stringa2/’’ (si veda Modificatori più avanti).
!# L’intera riga di comando battuta fino a questo punto.
Designatori di parola
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’ultimo argomento.
% La parola che combacia con ‘?stringa?’ nella più recente
ricerca.
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 un designatore di parola è fornito senza una specificazione di
evento, il comando precedente viene usato come evento.
Modificatori
Dopo l’opzionale designatore di parola, può comparire una sequenza di
uno o più fra i seguenti modificatori, ognuno preceduto da un ‘:’.
h Rimuove un componente finale in un nome di file, lasciando solo
la testa.
r Rimuove un suffisso finale della forma .xxx, lasciando il nome
base (basename).
e Rimuove tutto tranne il suffisso finale.
t Rimuove tutti i componenti di testa in un percorso, lasciando la
coda.
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.
s/vecchio/nuovo/
Sostituisce nuovo alla prima occorrenza di vecchio nella riga di
evento. Qualsiasi delimitatore può essere usato 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 un singolo backslash. Se compare & in
nuovo, esso è sostituito da vecchio. Un singolo backslash 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 !?stringa[?]
& 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’ una volta a ogni parola
nella riga di evento.
COMANDI INCORPORATI DELLA SHELL
Se non diversamente indicato, ogni comando incorporato documentato in
questa sezione, il quale accetti opzioni precedute da - , accetta --
per indicare la fine delle opzioni. Per esempio, i comandi incorporati
:, true, false e test non accettano opzioni.
: [argomenti]
Nessun effetto; il comando non fa niente, tranne l’espansione
degli argomenti e l’effettuazione di ogni ridirezione
specificata. È ritornato un codice di uscita zero.
. nomefile [argomenti]
source nomefile [argomenti]
Legge ed esegue comandi dal nomefile nell’ambiente di shell
corrente e ritorna lo stato d’uscita dell’ultimo comando
eseguito contenuto in nomefile. Se nomefile non contiene una
barra [/], i percorsi in PATH sono usati per trovare la
directory contenente nomefile. 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
ricercare. Se sono forniti degli argomenti, essi diventano i
parametri posizionali quando nomefile è eseguito. Altrimenti i
parametri posizionali sono inalterati. Lo stato di ritorno è lo
stato dell’ultimo comando terminato dentro lo script (0 se
nessun comando è eseguito), e falso se nomefile 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, è usata 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] [-lpsvPSV]
bind [-m keymap] [-q funzione] [-u funzione] [-r keyseq]
bind [-m keymap] -f nomefile
bind [-m keymap] -x keyseq:comando di shell
bind [-m keymap] keyseq:nome-funzione
bind comando readline
Mostra le correnti associazioni 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 in .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; 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.
-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.
-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.
-f nomefile
Legge le associazioni dei tasti dal file nomefile.
-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.
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 la shell non sta eseguendo un ciclo quando break viene
eseguito.
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.
cd [-L|-P] [dir]
Cambia la directory corrente con dir. La variabile HOME è il
dir di default. La variabile CDPATH definisce i percorsi di
ricerca per le directory che contengano dir. Nomi di directory
alternative in CDPATH sono separate 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 (si veda anche
l’opzione -P del comando incorporato set ; l’opzione -L forza a
seguire i collegamenti simbolici. Un argomento - è equivalente
a $OLDPWD. 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. Il
valore di ritorno è 0 [vero] se la directory è stata cambiata
con successo; falso altrimenti.
caller [expr]
Restituisce il contesto di qualsiasi chiamata di subroutine
attiva (una funzione di shell o uno script eseguito coi comandi
incorporati . o source. Senza expr, il caller mostra il numero
di riga e il nome di file di origine della chiamata di
subroutine corrente. Se è fornito un intero non negativo come
expr, 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 uno stack trace. Il
frame corrente è il frame 0. Il valore di ritorno è 0 tranne
quando la shell sta eseguendo una chiamata di subroutine o
quando expr non corrisponde a una posizione valida nello stack
delle chiamate.
command [-pVv] comando [arg ...]
Esegue comando con gli arg 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 di default
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 di 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] [-A azione] [-G globpat] [-W
wordlist] [-P prefisso] [-S suffisso]
[-X filterpat] [-F funzione] [-C comando] nome [nome ...]
complete -pr [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 alcun nome, tutte le specifiche di
completamento.
Il processo per applicare queste specifiche di completamento
quando si tenta il completamento della parola è descritto in
precedenza, sotto Completamento programmabile.
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 di default
di bash se comspec non genera corrispondenze.
default Usa il completamento del nome di file di default
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 di
file, consentendo così di effettuare qualsiasi
elaborazione di uno specifico nome di file (come
aggiungere una barra [/] ai nomi di directory o
sopprimere gli spazi finali). Fatto per essere
usato con le funzioni di shell.
nospace Dice a readline di non aggiungere uno spazio
(che viene aggiunto per default) 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.
-G globpat
Il modello di espansione dei nomi di file globpat viene
espanso per generare i possibili completamenti.
-W wordlist
La wordlist è suddivisa usando i caratteri nella
variabile speciale IFS come delimitatori, e viene
espansa ogni parola risultante. I possibili
completamenti sono gli elementi della lista risultante
che sono appropriati per la parola da completare.
-C comando
comando viene eseguito in un ambiente di subshell, e il
suo output viene usato come lista di possibili
completamenti.
-F funzione
La funzione di shell funzione viene eseguita
nell’ambiente di shell corrente. Quando finisce, i
possibili completamenti sono a disposizione nei valori
della variabile di array COMPREPLY .
-X filterpat
filterpat è un modello come quelli usati per
l’espansione del nome di file. È 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.
-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.
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, vien 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.
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 la shell non si trova all’interno di
un ciclo quando continue è eseguito.
declare [-afFirtx] [-p] [nome[=valore] ...]
typeset [-afFirtx] [-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 viene usato -p ,
vengono ignorate opzioni addizionali. 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 è abilitata con shopt, il nome di file d’origine
e il numero di riga dov’è definita la funzione vengono anch’esse
visualizzati. L’opzione -F sottintende -f 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 di array (si veda Array sopra).
-f Usa solo nomi di funzioni.
-i La variabile è trattata come un intero; la valutazione
aritmetica (si veda VALUTAZIONE ARITMETICA ) è effettuata
quando alla variabile è assegnato un valore.
-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.
-x Marca nomi per l’esportazione ai successivi comandi
attraverso l’ambiente.
Usare ‘+’ invece di ‘-’ disattiva l’attributo, con l’eccezione
che +a non può essere usato per eliminare una variabile array.
Quando usato in una funzione, rende ogni nome locale, come con
il comando local . 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, vien fatto un tentativo di definire una funzione
usando ‘‘-f foo=bar’’, vien fatto un tentativo per assegnare un
valore a una variabile in sola lettura, vien fatto un tentativo
per assegnare un valore a una variabile array senza usare la
sintassi di assegnamento composto (si veda Array sopra), uno dei
nomi non è un nome valido di variabile di shell, vien fatto un
tentativo per disattivare lo stato di sola lettura per una
variabile in sola lettura, vien fatto un tentativo per
disattivate lo stato di array per una variabile array, o vien
fatto 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 di default è 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.
+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.
-c Svuota lo stack delle directory cancellando tutti gli
elementi.
-l produce un elenco più lungo; il formato di default 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.
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 ...]
Senza opzioni, ogni jobspec viene rimosso dalla tabella dei job
attivi. 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 è presente
alcun jobspec e non viene fornita né l’opzione -a né l’opzione
-r , viene usato il job corrente. 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 è sempre 0. Se è specificato -n, il newline
finale è soppresso. Se è data l’opzione -e, viene abilitata
l’interpretazione dei successivi caratteri preceduti dal
carattere di protezione backslash. L’opzione -E disabilita
l’interpretazione di questi caratteri di protezione, anche su
sistemi dove essi sono interpretati per default. L’opzione di
shell xpg_echo può essere usata per determinare dinamicamente se
echo espande questi caratteri di protezione per default oppure
no. echo non interpreta -- come fine delle opzioni. echo
interpreta le seguenti sequenze di protezione:
\a allarme (segnale acustico)
\b spazio indietro (backspace)
\c sopprime il newline finale
\e un caratteri di escape
\f nuova pagina (form feed)
\n nuova riga (newline)
\r ritorno carrello (carriage return)
\t segno di tabulazione orizzontale
\v segno di tabulazione verticale
\\ backslash
\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)
enable [-adnps] [-f nomefile] [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 nomefile, sui
sistemi che supportano il caricamento dinamico. 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. Il valore di
ritorno è 0 tranne quando nome non è un comando incorporato
della shell o si verifica un errore nel caricamento di un nuovo
comando incorporato da un oggetto condiviso.
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’arg 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. 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 [-nf] [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 tutti i nomi che sono esportati in questa shell. 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 una 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] [-nlr] [primo] [ultimo]
fc -s [pat=rep] [cmd]
Corregge un comando. Nella prima forma, un intervallo di
comandi fra primo e ultimo viene selezionato dalla lista della
cronologia. 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). 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 l’editing 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 l’editing è completato, i comandi editati sono
listati ed eseguiti.
Nella seconda forma, comando è rieseguito dopo che ogni istanza
di pat è sostituita da rep. 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 [args]
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 in args, 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 nomefile] [-dt] [nome]
Per ciascun nome, il percorso completo del comando è determinato
ricercando le directory in $PATH e viene memorizzato. Se viene
fornita l’opzione -p , non viene effettuata nessuna ricerca di
percorso e nomefile è usato come nome completo del comando.
L’opzione -r fa sì che la shell dimentichi tutte le 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 [-s] [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. L’opzione -s restringe le informazioni
visualizzate a una breve sintassi d’uso. Lo stato di ritorno è
0 tranne quando nessun comando è individuato dal modello.
history [n]
history -c
history -d offset
history -anrw [nomefile]
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 nomefile, 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 offset
Cancella l’elemento della cronologia alla posizione
offset.
-a Accoda le ‘‘nuove’’ righe della cronologia (righe della
cronologia inserite dall’inizio della corrente sessione
di bash) 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 usa come
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 HISTTIMEFORMAT è impostata, l’informazione data/ora associata
a ogni elemento di cronologia viene scritta nel file di
cronologia. Il valore di ritorno è 0 tranne quando viene
incontrata un’opzione non valida, avviene un errore mentre si
legge o si scrive il file di cronologia, viene fornito un offset
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.
-p Elenca solo l’ID di processo del principale job del
gruppo di processo.
-n Mostra le informazioni solo sui job che hanno cambiato
stato dall’ultima notifica di stato mostrata all’utente.
-r Restringe l’output ai job in esecuzione.
-s Restringe l’output ai 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 [sigspec | stato d’uscita]
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. 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). 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 delle opzioni 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. 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.
popd [-n] [+n] [-n]
Rimuove degli elementi dallo stack delle directory. 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 Rimuove l’n-esimo elemento contando dalla sinistra della
lista mostrata da dirs, partendo da zero. 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.
-n Sopprime il normale cambiamento di directory quando
rimuove directory dallo stack, ossia viene manipolato
solo lo stack.
Se il comando popd ha successo, viene anche effettuato un dirs,
e lo stato di ritorno è 0. popd ritorna falso se viene
incontrata un’opzione non valida, lo stack delle directory è
vuoto, è specificato un elemento non esistente nello stack delle
directory, o il cambio di directory non ha successo.
printf [-v var] formato [argomenti]
Scrive gli argomenti formattati sullo standard output sotto il
controllo del formato. 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. In aggiunta ai
formati printf(1) standard, %b fa sì che printf espanda le
sequenze di protezione backslash nell’argomento corrispondente
(con l’eccezione che \c fa terminare l’output, i backslash in
\', \" e \? non sono rimossi e gli escape ottali che iniziano
con \0 possono contenere fino a quattro cifre), e %q fa sì che
printf stampi sull’output l’argomento corrispondente in un
formato riutilizzabile come input di shell.
L’opzione -v fa sì che l’output sia assegnato alla variabile var
invece di essere stampato sullo standard output.
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] [dir]
pushd [-n] [+n] [-n]
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, scambia le due directory
in cima e ritorna 0, a meno che lo stack delle directory non sia
vuoto. Gli argomenti, se forniti, hanno il seguente
significato:
+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.
-n Sopprime il normale cambio di directory quando si
aggiungono directory allo stack, ossia viene manipolato
solo lo stack.
dir Aggiunge dir in cima allo stack delle directory,
rendendola la nuova directory di lavoro corrente.
Se il comando pushd ha successo, viene anche effettuato un dirs
. Se è usata la prima forma, pushd ritorna 0 a meno che il cd
verso dir non abbia successo. Con la seconda forma, pushd
ritorna 0 tranne quando lo stack delle directory è vuoto, è
specificato un elemento non esistente nello stack delle
directory, o il cambiamento di directory verso la nuova
directory corrente specificata non ha successo.
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] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d
delim] [nome ...]
Viene letta una riga dallo standard input, o dal descrittore di
file fd fornito come argomento dell’opzione -u, 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. Il carattere backslash \ può
essere usato per rimuovere qualsiasi significato speciale dal
successivo carattere letto e per la continuazione di 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.
-e Se lo standard input viene da un terminale, readline (si
veda READLINE sopra) è usato per ottenere la riga.
-n nchars
read è considerata completata dopo aver letto inchars,
invece di aspettare una riga di input completa.
-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 Backslash non fa da carattere di protezione. Il
backslash è considerato come parte della riga. In
particolare, una coppia backslash-newline non può essere
usata come una continuazione di riga.
-s Modalità silenziosa. Se l’input viene da un terminale i
caratteri immessi non vengono visualizzati sul terminale.
-t timeout
Fa sì che read vada fuori tempo massimo e ritorni
insuccesso se un riga completa di input non viene letta
entro timeout secondi. Quest’opzione non produce effetti
se read non sta leggendo l’input da un terminale o da una
pipe.
-u fd Legge l’input dal descrittore di file fd.
Se non sono forniti nomi la riga viene assegnata alla variabile
REPLY. Lo stato d’uscita è 0, tranne quando viene raggiunta la
fine del file, read esaurisce il tempo limite consentito o viene
fornito un descrittore di file non valido come argomento a -u.
readonly [-apf] [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. Se nessun argomento nome è dato, o se è
fornita l’opzione -p, viene stampata una lista di tutti i 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 esca 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 usato fuori da
una funzione, ma durante l’esecuzione di un 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 usato fuori da una funzione e non durante
l’esecuzione di uno script per mezzo di ., lo stato di ritorno è
falso. Qualsiasi comando associato alla gestione del segnale
RETURN viene eseguito prima che l’esecuzione riprenda dopo la
funzione o script.
set [--abefhkmnptuvxBCHP] [-o option] [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 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 Automaticamente marca le variabili e le funzioni che
sono modificate o create, 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 Esce immediatamente se un comando semplice (si veda
GRAMMATICA DELLA SHELL sopra) 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 in un’istruzione if , se fa
parte di una lista && o â”│â”│ , o se il valore di ritorno
del comando è stato negato per mezzo di !. Un comando
sul segnale intercettato ERR, se impostato, è eseguito
prima dell’uscita della shell.
-f Disabilita l’espansione di percorso.
-h Ricorda la posizione dei comandi man mano che sono
ritrovati per l’esecuzione. Questa è abilitata per
default.
-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 per default per le shell
interattive, su sistemi che lo supportano (si veda JOB-
CONTROL sopra). I processi in background girano in un
gruppo di processo separato e una riga che contiene il
loro stato d’uscita viene stampata al termine della loro
esecuzione.
-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 editing della riga di
comando in stile emacs. Questo è abilitato per
default quando la shell è interattiva, a meno
che la shell non sia avviata con l’opzione
--noediting.
errtrace
Lo stesso di -E.
functrace
Lo stesso di -T.
errexit Lo stesso di -e.
hashall Lo stesso di -h.
histexpand
Lo stesso di -H.
history Abilita la cronologia dei comandi, come
descritto in precedenza, sotto CRONOLOGIA.
Questa opzione è attiva per default 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).
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. Questa opzione è
disabilitata per default.
posix Cambia il comportamento di bash quando il
comportamento di default differisce da quello
standard POSIX per farlo concordare con la
(modalità posix standard.
privileged
Lo stesso di -p.
verbose Lo stesso di -v.
vi Usa un’interfaccia di editing della riga di
comando in stile vi.
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 la variabile
SHELLOPTS , se appare in un ambiente, viene ignorata.
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.
-t Esce dopo aver letto ed eseguito un comando.
-u Considera errore le variabili non impostate quando
effettua l’espansione di parametro. Se l’espansione è
tentata su una variabile non impostata, 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).
Questo è attivo per default.
-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 per default quando la shell è
interattiva.
-P Se impostato, non segue i collegamenti simbolici quando
esegue comandi come cd che cambiano la directory di
lavoro corrente. È invece usata la struttura di
directory fisica. Per default, 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 per default 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] [optname ...]
Attiva/disattiva i valori di variabili che controllano il
comportamento opzionale della shell. Senza opzioni, o con
l’opzione -p , viene mostrata una lista di tutte le opzioni
impostabili, con una indicazione se ognuna è impostata o no.
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, la visualizzazione è limitata a quelle opzioni che
sono, rispettivamente, attivate o non attivate. Se non
diversamente indicato le opzioni shopt sono disabilitate (non
attivate) per default.
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 è:
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 di 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.
checkwinsize
Se impostata, bash controlla la dimensione della
finestra dopo ogni comando e, se necessario, aggiorna i
valori di LINES e COLUMNS
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.
dotglob Se impostata, bash include i nomi di file che iniziano
con un ‘.’ nel risultato dell’espansione del percorso.
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
in precedenza, sotto ALIASES. Questa opzione è
abilitata per default per le shell interattive.
extdebug
Se impostata, 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), viene simulata una
chiamata a return.
4. BASH_ARGC e BASH_ARGV sono aggiornati come
descritto nelle loro descrizioni viste sopra.
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 ERROR.
extglob Se impostata, le caratteristiche di corrispondenza
estesa di modelli descritte in precedenza, sotto
Espansione di percorso sono abilitate.
extquote
Se impostato, la quotatura $'stringa' e $"stringa" è
effettuata all’interno delle espansioni di ${parametro}
racchiuse tra virgolette. Quest’opzione è abilitata per
default.
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 DI SHELL sopra per una
descrizione di FIGNORE. Quest’opzione è abilitata per
default.
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 editing
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 .
Questa è abilitata per default.
huponexit
Se impostata, bash invia SIGHUP a tutti i job all’uscita
di una shell di login interattiva.
interactive_comments
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). Quest’opzione è abilitata per default.
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.
login_shell
La shell imposta quest’opzione se viene avviata come
shell di login (si veda INVOCAZIONE sopra). 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 di file senza
distinguere le maiuscole dalle minuscole quando effettua
l’espansione del percorso (si veda Espansione del
percorso sopra).
nocasematch
Se impostata, bash confronta modellisenza distinguere le
maiuscole dalle minuscole quando ricerca corrispondenze
mentre esegue i comandi condizionali case o [[.
nullglob
Se impostata, bash permette ai modelli che non
individuano nessun file (si veda Espansione del percorso
sopra) di espandere come una stringa nulla, piuttosto
che essere presi letteralmente.
progcomp
Se impostata, i servizi di completamento programmabile
(si veda Completamento programmabile sopra) vengono
abilitati. Quest’opzione è abilitata per default.
promptvars
Se impostata, le stringhe di prompt subiscono espansione
di parametro, sostituzione di comando, espansione
aritmetica e rimozione dei segni di quotatura dopo che
sono stati espansi come descritto in STRINGHE DI PROMPT
sopra. Quest’opzione è abilitata per default.
restricted_shell
La shell imposta quest’opzione se è stata avviata in
modalità ristretta (si veda SHELL RISTRETTA più avanti).
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
per default.
xpg_echo
Se impostata, il comando incorporato echo espande
sequenze di protezione backslash per default.
suspend [-f]
Sospende l’esecuzione di questa shell fino a che non riceve un
segnale SIGCONT. L’opzione -f dice di non preoccuparsi se
questa è una shell di login; va sospesa comunque. Lo stato di
ritorno è 0 tranne quando la shell è una shell di login e non è
fornito -f, o se il job-control non è abilitato.
test expr
[ expr ]
Ritorna uno stato di 0 o 1 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 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.
! 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 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
Se il secondo argomento è uno degli operatori binari
condizionali elencati in precedenza, sotto ESPRESSIONI
CONDIZIONALI, il risultato dell’espressione è il
risultato del test binario che usa gli argomenti primo e
terzo come operandi. 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. Gli operatori -a e -o sono considerati in questo
caso operatori binari
4 argomenti
Se il primo argomento è !, il risultato è la negazione
dell’espressione composta dai rimanenti argomenti.
Altrimenti, l’espressione è analizzata e valutata secondo
le precedenze usando le regole elencate sopra.
5 o più argomenti
L’espressione è analizzata e valutata secondo le
precedenze usando le regole elencate sopra.
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).
Fare riferimento alla descrizione dell’opzione extdebug del
comando incorporato shopt per dettagli sul suo effetto nella
gestione del segnale DEBUG. Se un sigspec è ERR il comando arg
viene eseguito ogni volta che 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
un comando while o until , se fa parte del test in un’istruzione
if ,
se fa parte di una lista && o â”│â”│ , o se il valore di ritorno
del comando in esecuzione viene negato da un !. Queste sono le
stesse condizioni imposte all’opzione errexit. 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. 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 un processo figlio quando esso è
creato. 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 nome’’ non avesse ritornato file.
L’opzione -P forza PATH a ricercare ogni nome, anche se ‘‘type
-t nome’’ non dovesse ritornare file. Se un comando è nella
tabella hash, -p e -P stampano il valore nella tabella hash, 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
uno qualsiasi degli argomenti viene trovato, falso se non ne è
trovato nemmeno uno.
ulimit [-SHacdefilmnpqrstuvx [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 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Ã
vengono stampati prima del valore. Le altre opzioni sono
interpretate come segue:
-a sono riportati tutti i limiti correnti
-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
-l la dimensione massima di memoria che può essere bloccata
-m la dimensione massima della memoria occupata.
-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
-x Il numero massimo di file lock
Se limite è dato, esso è il nuovo valore della risorsa
specificata (l’opzione -a è solo per visualizzazione). Se
nessuna opzione è data, allora è assunta -f. I valori sono in
multipli di 1024 byte, tranne che per -t, che è in secondi, -p,
che è in unità di blocchi da 512 byte, e -n e -u, che sono
numeri puri. 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 simbolico di
modo 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 di default è 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] [nome ...]
Per ciascun nome, rimuove la corrispondente variabile o
funzione. Se non vengono fornite opzioni, o è specificata
l’opzione -v , ogni nome designa una variabile di shell. 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. Ogni variabile o
funzione rimossa è eliminata dall’ambiente passato ai comandi
successivi. Se una qualsiasi fra RANDOM, SECONDS, LINENO,
HISTCMD, FUNCNAME, GROUPS o DIRSTACK è 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.
wait [n ...]
Aspetta ogni processo specificato e ritorna il suo stato di
completamento. Ciascun n può essere un ID di processo o una
specificazione di job; se è data una specificazione di job, si
aspettano tutti i processi nella pipeline di quel job. Se n è
omesso, si aspettano tutti i processi figli correntemente
attivi, e lo stato di ritorno è 0. Se n specifica un processo o
job non esistenti, lo stato di ritorno è 127. Altrimenti, lo
stato di ritorno è lo stato d’uscita dell’ultimo processo o job
di cui si è atteso il completamento.
SHELL RISTRETTA
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, ENV o BASH_ENV
· specificare nomi di comando contenenti un /
· specificare un nome di file contenente un / come argomento al
comando incorporato .
· 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 set +o
restricted.
Queste restrizioni sono imposte dopo aver letto eventuali file di
avvio.
Quando viene eseguito un comando che viene riconosciuto come uno script
di shell (si veda ESECUZIONE DI UN COMANDO sopra), rbash rimuove ogni
restrizione nella shell creata dalla shell genitrice per eseguire lo
script.
VEDERE ANCHE
Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and
Utilities, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
FILE
/bin/bash
L’eseguibile bash
/etc/profile
Il file di inizializzazione generale di sistema, eseguito per le
shell di login
~/.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
~/.inputrc
Il file di inizializzazione individuale per readline
AUTORI
Brian Fox, Free Software Foundation
bfox@gnu.org
Chet Ramey, Case Western Reserve University
chet@po.cwru.edu
NOTIFICA DEI BACHI
Se trovate un baco [bug] in bash, dovreste segnalarlo. Ma prima,
dovreste assicurarvi che sia veramente un baco, e che appaia nella
versione più recente di bash . L’ultima versione è sempre disponibile
da ftp://ftp.gnu.org/pub/bash/.
Una volta determinato che avete individuato realmente un baco, usate il
comando bashbug per inviare una notifica del baco. Se avete una
correzione, siete invitati a inviare anche quella! Suggerimenti e
rapporti su bachi ’filosofici’ possono essere inviati a bug-
bash@gnu.org o inviati al newsgroup su Usenet gnu.bash.bug.
TUTTI i rapporti su bachi dovranno includere:
Il numero di versione di bash
L’hardware e il sistema operativo
Il compilatore usato per compilare
Una descrizione del comportamento bacato
Un breve script o ‘ricetta’ che produca il baco
bashbug inserisce le prime tre voci automaticamente nel modello che
fornisce per compilare una notifica di baco.
Commenti e notifiche su bachi riguardanti questa pagina di manuale
dovranno essere indirizzati a chet@po.cwru.edu.
BACHI
È 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à .
I comandi all’interno di una sostituzione di comando $(...) non sono
analizzati finché non è stata tentata la sostituzione. Questo
posticipa la scoperta di errori a qualche tempo dopo che è stato dato
il comando. Per esempio, parentesi aperte e non chiuse e viceversa,
anche all’interno di commenti di shell, producono un messaggio di
errore già mentre il costrutto è in fase di lettura.
Le variabili di array non possono essere esportate (per il momento).