BASH
Section: User Commands (1)
Updated: 2006 September 28
Index
Return to Main Contents
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
VALUTAZIONEARITMETICA.
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
ESPRESSIONICONDIZIONALI.
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
VALUTAZIONEARITMETICA.
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 ]
-
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
COMANDIINCORPORATIDISHELL).
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
VALUTAZIONEARITMETICA.
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
GRAMMATICADELLASHELL,
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
VALUTAZIONEARITMETICA).
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
ESPRESSIONICONDIZIONALI.
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
ESPRESSIONICONDIZIONALI,
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
ESPRESSIONICONDIZIONALI,
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).
Index
- NOME
-
- SINTASSI
-
- COPYRIGHT
-
- DESCRIZIONE
-
- OPZIONI
-
- ARGOMENTI
-
- INVOCAZIONE
-
- DEFINIZIONI
-
- PAROLE RISERVATE
-
- GRAMMATICA DELLA SHELL
-
- Comandi semplici
-
- Pipeline
-
- Liste
-
- Comandi composti
-
- Definizioni della funzione di shell
-
- COMMENTI
-
- QUOTATURA
-
- PARAMETRI
-
- Parametri posizionali
-
- Parametri speciali
-
- Variabili di shell
-
- Array
-
- ESPANSIONE
-
- Espansione delle parentesi graffe
-
- Espansione della tilde
-
- Espansione di parametro
-
- Sostituzione di comando
-
- Espansione aritmetica
-
- Sostituzione di processo
-
- Suddivisione in parole
-
- Espansione di percorso
-
- Rimozione dei caratteri di quotatura
-
- RIDIREZIONE
-
- Ridirezione dell'input
-
- Ridirezione dell'output
-
- Accodare l'output ridiretto
-
- Ridirezione di standard output e standard error
-
- Here Document
-
- Here String
-
- Duplicazione dei descrittori di file
-
- Muovere i descrittori di file
-
- Apertura di descrittori di file per lettura e scrittura
-
- ALIAS
-
- FUNZIONI
-
- VALUTAZIONE ARITMETICA
-
- ESPRESSIONI CONDIZIONALI
-
- ESPANSIONE DI COMANDO SEMPLICE
-
- ESECUZIONE DI UN COMANDO
-
- AMBIENTE DI ESECUZIONE DEL COMANDO
-
- AMBIENTE
-
- STATO D'USCITA
-
- SEGNALI
-
- JOB-CONTROL
-
- STRINGHE DI PROMPT
-
- READLINE
-
- Notazione readline
-
- Inizializzazione di Readline
-
- Associazioni di tasti readline
-
- Variabili readline
-
- Costrutto condizionale di readline
-
- Ricerca
-
- Nomi di comando readline
-
- Comandi di movimento
-
- Comandi per manipolare la cronologia
-
- Comandi per cambiare il testo
-
- Eliminazione e recupero
-
- Argomenti numerici
-
- Completamento
-
- Macro di tastiera
-
- Varie
-
- Completamento programmabile
-
- CRONOLOGIA
-
- ESPANSIONE DELLA CRONOLOGIA
-
- Designatore di evento
-
- Designatori di parola
-
- Modificatori
-
- COMANDI INCORPORATI DELLA SHELL
-
- SHELL RISTRETTA
-
- VEDERE ANCHE
-
- FILE
-
- AUTORI
-
- NOTIFICA DEI BACHI
-
- BACHI
-
This document was created by
man2html,
using the manual pages.
Time: 22:31:25 GMT, June 24, 2008