problemi con script bash e ricorsione

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

danix85 ha scritto:...

Codice: Seleziona tutto

Compound Commands
       A compound command is one of the following:

       (list) list is executed in a subshell environment (see COMMAND  EXECUTION  ENVIRONMENT  below).
              Variable  assignments  and  builtin  commands that affect the shell's environment do not
              remain in effect after the command completes.  The return status is the exit  status  of
              list.
e volevo capire meglio...
Ti dice che se vuoi, puoi eseguire una serie di comandi inserendoli tra le parentesi tonde. Ti dice che tutti i comandi vengono eseguiti in una sotto-shell e che quindi tutte le modifiche fatte a variabili d'ambiente, o settaggi di altre variabili d'ambiente non hanno effetto nella shell attuale. Infine ti dice che lo stato di ritorno è lo stato di ritorno dell'ultimo comando eseguito.
Cos'è lo stato di ritorno?
Tutti i programmi quando vengono invocati escono facendo una chiamata di sistema tipo "exit status". Sotto linux o unix-like system i programmi che finiscono la loro esecuzione in modo corretto escono con uno stato di uscita pari a 0. In caso di errori di ogni tipo, escono con uno stato diverso da 0.
Il comando grep ad esempio, se non trovo quello che si sta cercando ritorna uno stato di uscita 1. Lo stato di uscita dell'ultimo comando eseguito viene memorizzato dalla shell nella variabile '?'.
Per fare un esempio in modo da farti capire ciò che hai chiesto esegui:

Codice: Seleziona tutto

> (echo ciao | grep ciao);
> echo $?;
0
Tutti i comandi tra parentesi sono stati eseguiti in una sub-shell e lo stato di uscita è stato 0. Infatti grep ha trovato ciao.
Facendo invece:

Codice: Seleziona tutto

> (echo ciao | grep bho);
> echo $?
1
Per quanto riguarda che tutto ciò che fai non ha effetto nella shell attuale fai quanto segui:

Codice: Seleziona tutto

> (echo ciao; CASA=bho; echo $CASA);
ciao
bho
> echo $CASA;

Come vedi nella sub-shell in cui abbiamo eseguito i comandi la variabile CASA era impostata, metre, una volta usciti la variabile casa è rimasta come era prima (ovvero non era impostata).

Spero di averti chiarito le idee,
Spina

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Messaggio da danix »

si, infatti mi hai chiarito giusto il punto che non mi era troppo chiaro, e cioè il fatto che inserendo i comandi tra parentesi vengono eseguiti in una sub shell, per il resto gli exit status li conoscevo gia, infatti negli script un pò più complessi già li uso...

grazie mille, ancora una volta mi sei stato davvero utile...

[EDIT]
waka_jawaka ha scritto: Ma siamo in Star Trek o in Guerre Stellari?!!
Razzo, non imparerò mai... :cry: :cry: :cry: :cry:
??? Non ho capito...
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Rispondi