Newsgroup: it.comp.os.linux.iniziare
Titolo: Script bash, non mi va il cd....Aiuto!

Ciao a tutti, ho provato a leggere e cercare in google prima di postare, ma 
non ho trovato ancora una soluzione...
Incollo il codice...
#!/bin/bash
if [ $# -eq 0 ]; then
  echo Questo Script monta le partizioni con le opzioni presenti in 
/etc/fstab
  echo Digitare \"mnt x\" dove:
  echo x = 1  Monta il Disco 1 part vfat
  echo x = cd Monta il Disco CD-ROM
else if [ $1 = 1 ] || [ $1 = 1c ]; then
  mount /mnt/disk1
  if [ $1 = 1c ]; then
  cd /mnt/disk1/
  fi
else if [ $1 = cd ]; then
  mount /mnt/cdrom
fi
fi
Bene, il tutto senbra funzionare sia che usi 1 o 1c, o meglio la partizione 
viene montata correttamente, ma poi non esegue il cd /mnt/disk1 !!!
Anche se commento l'if e il fi, per obbligarlo ad eseguire il cd subito 
dopo il mount il cd non viene eseguito e non da nessun errore...:(
Come faccio a fargli cambiare directory?
Grazie.
Katte.

 viene montata correttamente, ma poi non esegue il cd /mnt/disk1 !!!
Errore!
Il cd lo esegue, ma tu, dall'esterno dello script, non lo saprai mai.
Se vuoi fare la prova, metti un ls subito dopo il cd, vedrai che lo fa
nella directory giusta.
man source ti puo' essere di molto aiuto.
In breve: ogni volta che esegui uno script di shell, il sistema lancia
*un'altra* shell, con il suo ambiente.
Appena lo script termina, l'ambiente in cui girava muore con lui.
Con source, fai eseguire lo script all'interno della shell corrente,
cosi' da ereditare variabili e impostazioni d'ambiente.
-- 
          |Save our planet!
   Ciao   |Save wildlife!
  roberto |For your E-MAIL use ONLY recycled Bytes  !!
          |roberto poggi   
rpo...@softhome.net

 
Cavolo ho capito, quindi uno script si può vedere come una specie di 
funzione....
Grazie mille per l'aiuto, vado subito a leggermi la man page che mi hai 
citato.
Grazie ancora.
Bye.
Katte.

 funzione....
Nemmeno. :-)
Uno script non e' altro che un parametro che tu passi,
inconsapevolmente, al lancio di un'altra shell.
E' come se tu eseguissi un qualsiasi programma interpretato: lanci
l'interprete e gli fai eseguire il programma.
Ammetti di avere un linguaggio qualsiasi, chiamato pippolo, che prevede
l'esecuzione di file.pip: tu lanci 
pippolo file.pip
e lui esegue.
La stessa cosa lo fa la shell, se guardi, la possibilita' di inserire in
testata allo script la riga con l'indicazione del programma da eseguire,
la fa funzionare nello stersso modo.
Se non ci metti nulla, cio' che viene lanciato e' una seconda copia
della shell di sistema.
Infatti, la shell viene spesso tradotta come:"interprete dei comandi".


 Infatti, la shell viene spesso tradotta come:"interprete dei comandi".
Capito, ora è tutto molto più chiaro grazie!
Xò ti volevo chiedere un'ultimo indizio, ho letto il manuale della bash e 
ho letto la parte riguardante il source, però il source vuole una sintassi 
del tipo: source .filename [argomenti].
Il cd /mnt/... non è un comando, ma fa parte dei comandi della bash, e 
quindi quando il mio script arriva al punto di fare: source cd /mnt/disk1 
si rifiuta e mi dice: command not found..
Come devo fare a fargli capire che il cd è un comando della bash e non un 
file?
Grazie ancora.
Bye.
katte.

 Capito, ora ? tutto molto pi? chiaro grazie!
Non si direbbe, da quello che dici dopo. :-)
Allora, cancelliamo tutta la lavagna e ripartiamo dall'inizio.
Per eseguire uno script, la bash lancia un'altra copia di se stessa,
entro cui lo script fa i suoi porci comodi, con l'effetto (voluto) che
cio' che combina lo script, li' dentro, alla bash padre non gliene puo'
fregare di meno (a parte cancellazioni di file, ovviamente).
Questo significa ereditare una copia dell'ambiente di shell.
Bada bene, una copia.
Quando lo script finisce, termina anche l'esecuzione della seconda copia
della shell, e lo strato superficiale (dove c'era l'ambiente) viene
sbucciato via.
Per eseguire uno script dentro lo stesso ambiente, cioe' farlo eseguire
dalla stessa shell in cui sei ora, serve *lanciare lo script* con
source.
Se chiamiamo pippo uno script che contiene questo:
cd /tmp
touch pippo
e lo si lancia normalmente, alla fine trovi un file pippo nella dir
/tmp, ma se fai un pwd ti ritrovi nelle dir da cui sei partito.
Ma se lo esegui con source 
. ./pippo (per indicare source basta un punto separato con uno spazio
dal comando da eseguire), alla fine della storia, con pwd ti trovi
dentro a /tmp.


 dentro a /tmp.
E infatti funziona! :)
stavolta credo (spero :) ) di aver capito...Ci ho messo un po' xò ora ci 
sono arrivato grazie al tuo aiuto...
Cmq. non mi sarei mai immaginato che potesse essere così...
Devo dire che con linux non smetti mai di imparare...è davvero bello:)
Grazie mille ancora.
Bye.
katte.