Newsgroup: it.comp.os.linux.iniziare
Titolo: Script e file di configurazione

Volendo creare uno script che deve girare con permessi di
semplice utente, pensavo di mettere il suo file di configurazione
in formato testo semplice nella locazione
$HOME/.scriptino/scriptino.config
Allo stesso tempo all'inizio dello script vorrei prevedere la
possibilità di verifica dell'esistenza del file di configurazione
e sua directory ".scriptino" nella home dell'utente.
Se questa directory e il file di configurazione interno ad essa
non esiste (prima volta che si esegue lo script per esempio)
vorrei che fosse creata...
Sì, ma per la directory ok, ma per il file di configurazione
come fare?
andrà copiato da un file di configurazione di default da qualche
parte tipo in /etc/scriptino/scriptino.conf o altrimenti come
fare? è la strada giusta?
Se non mi fossi spiegato non esitate a chiedere....grazie in
anticipo. Saluti  :-)

 come fare?
Non so se ho capito bene, comunque una cosa cosě:
#!/bin/bash
SCRIPTNAME=scriptino
DEFCONF=/etc/$SCRIPTNAME/$SCRIPTNAME.conf
USERCONF=~/.$SCRIPTNAME/$SCRIPTNAME.conf
[ -f $DEFCONF ] && . $DEFCONF
if [ ! -d `dirname $USERCONF` ]
then
     mkdir -p `dirname $USERCONF` || exit 1
     cat << "EOF" > $USERCONF
# Contenuto del file di configurazione
# ...
# Fine file di configurazione
EOF
fi
[ -f $USERCONF ] && . $USERCONF
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.

 EOF
Cioè...tu dici di scrivere il file di configurazione direttamente
nel sorgente dello script? E stamparlo sul file $USERCONF qualora
questo fosse assente...?
Ma non è un po' confusionaria come soluzione? Anche perchè in
questo caso allora non serivrebbe pià amolto il file in /etc con
la configurazione di default.
Forse non mi ero spiegato bene io:
il file di default.config che avevo in mente doveva essere
copiato pari pari dall'utente nella propria home, in modo da
poterselo modificare a piacere. Quindi se ne mettiamo il
contenuto nel sorgente dello script....tanto vale lasciar perdere
il file di configurazione in /etc.
Avevo in mente di fare un pacchetto con tipo:
/etc/nomescript/defaultconfig
/usr/miei.bin/script.sh
/usr/doc/nomescript/{appunti vari promemo eccecc}
Quindi alla fine direi che root crea lo script (in fase di
installazione), crea i file di configurazione, la documentazione
ecc ecc. Tutto ciò però deve essere fruibile dall'utente
semplice, quindi lo script deve funzionare coi permessi d'utente,
la configurazione essere accessibile all'utente semplice almeno
in lettura (tanto per copiarsela nella propria home,
semplicemente con un cp pensavo).
Si potrebbe anche pensare di creare unicamente il file di
configurazione di default in /etc o addirittura in /usr/doc come
esempio nella documentazione e predisporre nello script un
messaggio d'errore nel caso la configurazione non fosse presente
nella home dell'utente...Qualcosa del tipo:
Config file not found. Please...rtfm!
così uno è obbligato a cercare nella "documentezione" dove capirà
di doversi copiare l'esempio nella $HOME.
Ma non mi piace molto...vorrei che la configurazione di default
fosse ricopiata automaticamente nella $HOME eventualmente
avvertendo l'utente:
copiata configurazione di default
Se è la prima volta che usi sto script leggi la doc e modificalo
opportunamente...
Poi riavvia lo script.
Quindi forse sarebbe bene che lo script non funzionasse se non
fosse presente la configurazione, copiandone una da quella di
default e permettendo all'utente di modificarsela prima di far
girare tutto l'accrocchio. Non so magari ci sono soluzioni
migliori.
Chiedo scusa per la lunghezza.
Grazie mille Flavio per la consueta puntualità e il tempo
dedicato alle mie questioni da 4 soldi.  ;-)

 migliori.
Per esempio se fai un file di conf generale puoi scriverci dentro:
UNCONFIGURED=true
E poi all'inizio dello script controlli la variabile:
#!/bin/bash
DAEMON=demone
[ -f /etc/$DAEMON/$DAEMON.conf ] && . /etc/$DAEMON/$DAEMON.conf
[ -z "$UNCONFIGURED" ] && UNCONFIGURED=true
if $UNCONFIGURED
then
      [ ! -d $HOME/.$DAEMON ] && mkdir -p $HOME/.$DAEMON || exit 1
      [ ! -f $HOME/.$DAEMON/$DAEMON.conf ] && \
         cp /usr/share/doc/$DAEMON/$DAEMON.conf $HOME/.$DAEMON/
      echo "Il prodotto non è stato configurato correttamente."
      echo "E' stato creato un file di configurazione di default in"
      echo "$HOME/.$DAEMON/$DAEMON.conf. Modificalo secondo le tue esigenze"
      echo "e setta UNCONFIGURED=false quando è stato personalizzato"
      exit 0
fi
...


      echo "e setta UNCONFIGURED=false quando è stato personalizzato"
cioè l'utente dovrebbe editare il file di configurazione generale
mettendoci "false"?
E se poi un secondo utente decide di usare lo script...?
Non gli verrebbe creato il file di configurazione perchè
"$UNCONFIGURED = false"...sbaglio?
E una cosa del genere?
#!/bin/bash
prog=dwl
sysconf=/etc/$prog/$prog.conf
[ -f $sysconf ] && . $sysconf || exit 1
[ ! -d $usrdir ] && mkdir -p $userdir || exit 1
if [ ! -f $usrconf ]
then
  cp $docconf $usrconf || exit 1
  cat << "EOF"
Program not yet configured...
Configuration file created in $usrconf.
Please, edit it as your prefer.
See documentation for details.
EOF
  exit 0
fi
Il file di configurazione generale sarà /etc/dwl.conf
e conterrà anche le locazioni predefinite per i file di
configurazione di ciascun utente definendole in variabili che ho
chiamato $usrdir per la directory /$HOME/.dwl/
$usrconf per il file di configurazione paricolare dell'utente
/$HOME/.dwl/dwl.conf e $docconf per il file di esempio nella
documentazione /usr/share/doc/dwl/dwl.conf.
A parte gli exit status con cui non ho molta confidenza e che
dovrei vedermi un po' con calma, cosa ti pare? potrebbe essere
una soluzione con qualche pregio?
Scusa la lunghezza e grazie ancora per la disponibilità.
A presto  :-)

 una soluzione con qualche pregio?
Per andare va, ma personalmente come detto precedentemente, IMHO se generi 
una conf di default allora dovresti farla generare allo script, non 
copiarla. Se invece vuoi copiarla allora lascia che se la copi l'utente che 
potrebbe volerne copiare una già pronta o altro.
