Forum Programmation.shell mon script ferme le terminal ?!

Posté par  .
Étiquettes : aucune
0
21
déc.
2008
bonsoir,
j'ai fais un petit script qui me fait un backup, il est tout simple mais il a un probleme : il me ferme le terminal dans lequel il tourne et je ne comprends pas pourquoi.
voici le script :
#!/bin/bash

if [ ! -d "$1" ] ; then
echo "$1 doit etre un dossier"
return
fi
LIST=/etc
echo "sauvegarde systeme de base : dossiers $LIST"
ARCH="$1/sav-base.tar.bz2"

CMD="sudo tar -cjf $ARCH $LIST --totals"
echo $CMD
exec $CMD

alors oui je sais, encore un script de backup, il y en a plein... mais tout ce que j'ai vu ne me convient pas : je ne veux pas de script quotidient, moi je veux juste lancer un backup du (ou des dossiers) listés dans le script (LIST) et surtout le lancer manuellement,

Bref, je ne sais pas pourquoi ca ferme mon terminal, le fichier est bien crée
je le lance ainsi :
. sav /media/key/backup

ha oui aussi, j'ai tar qui me reponds ca :
tar: Retrait de « / » de tête des noms des membres
ca ne l'empeche pas de fonctionner mais je ne comprends pas quel / j'aurai mis en trop ?

pas facile, je ne pensais pas y passer autant de temps,
au secours...
merci.
  • # rtfm - stfg

    Posté par  . Évalué à 5.

    http://linux.die.net/man/1/exec

    ... On successful completion, exec never returns. ...

    Peut être est ce la ton problème.

    Enlève le tout simplement, tu peux mettre la variable $CMD directement.

    Ensuite tar enlève le premier '/' des dossiers pour ne pas écraser ton FS lors du futur extract.
    Ici '/etc' devient 'etc' dans l'archive.
    • [^] # Re: rtfm - stfg

      Posté par  . Évalué à 4.

      effectivement, on s'en rend bien compte si on ouvre un nouveau xterm et que l'on tape dedans : exec ls

      cela quitte immédiatement après avoir tout listé.

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

      • [^] # y'a pas "man exec" ;)

        Posté par  . Évalué à 4.

        bien vu, merci, ca marche bien.
        voici pour info, mon ptit script.
        a lancer avec ./sav et non pas . sav a cause de l"exit
        #!/bin/bash

        LIST=/etc
        NOM=etc

        if [ ! -d "$1" ] ; then
        echo "$1 doit etre un dossier"
        exit
        fi
        echo "sauvegarde systeme de base : $LIST"
        ARCH="$1/sav-$NOM.tar.bz2"

        CMD="sudo tar -cjf $ARCH $LIST --totals"
        echo $CMD
        $CMD

        merci.
  • # Lancement

    Posté par  (site web personnel) . Évalué à 2.

    Il y a 2 causes à ton problèmes :
    - tu ne le lance pas comme un exécutable, mais comme une liste de commandes du shell
    - tu utilise exec pour lancer la sous-commande

    Ce qui en résumé donne :
    - le contenu de ton script est lancé dans le shell en cours
    - le shell en cours est remplacé par $CMD
    - $CMD se termine -> le le terminal fait comme si bash s'était terminé

    Fais de ton script un exécutable (chmod +x sav) et lance le avec ./sav
    • [^] # Re: Lancement

      Posté par  . Évalué à 2.

      Merci,
      c'est exactement ca.
      ca faisait longtemps que j'avais plus fait de script.

      et puis je bookmark linux-attitude du coups ;)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.