Forum Programmation.shell Script Bash

Posté par  .
Étiquettes :
0
26
déc.
2006
Bonjour à tous.
Ce n'est pas sans émotion que j'écris mon première demande dans le forum.

Il y a un truc que je ne capte pas.
J'ai fait dans ma Debian le script bash ci-dessous simple qui range mes vidéos de mon Home et mes répertoires de téléchargement dans le répertoire video.
Sous ma Debian, ça marche perfecto, sauf pour les fichiers avec un espace (mais à la limite, ça je crois avoir déjà vu des solutions vite fait).

Le problème, c'est que sur la Ubuntu, ce script ne marche pas. J'ai tout essayé, et finalement il marche que si j'enlève les crochets. Alors j'ai essayé des points virgules à la place des virgules, des parenthèses à la place des crochets... Mais niette.
Par exemple $HOME/*.avi marche
mais $HOME/*.{avi} ne marche pas, alors que sous la Debian, ça marche.



#!/bin/sh
video=~/maison/video
downloads=~/maison/downloads


for i in `echo $HOME/*.{avi,mpg,ogm,mkv,mpeg,wmv} && echo $downloads/*/*.{avi,mpg,ogm,mkv,mpeg,wmv}` ; do
if [ -e $i ]
then echo -e "\n\nLe fichier : `basename $i` \t\t A ÉTÉ DÉPLACÉ...\n\n"
mv $i $video
fi
done




Merci d'avance pour vos réponses.
  • # /bin/bash

    Posté par  . Évalué à 5.

    Essaie d'abord avec #!/bin/bash
    "brace expansion" n'existe pas dans le bourne shell original

    http://www.gnu.org/software/bash/manual/bashref.html#SEC131

    Ensuite regarde où pointe /bin/sh sur chaque distribution.
    Par exemple sur ma Debian, l'alternative pointe sur dash ... (et donc ton script n'y fonctionnerait sans doute pas correctement)
    • [^] # Re: /bin/bash

      Posté par  . Évalué à 1.

      Mon gars, t'es trop fort.

      En effet, en remplaçant #!/bin/sh par #!/bin/bash ça marche !


      Le plus drôle, c'est que si je mets rien au début ça marche quand même....


      Merci beaucoup.
      • [^] # Re: /bin/bash

        Posté par  . Évalué à 2.

        Si tu ne mets rien au début, le système va essayer de déterminer la nature du contenu du fichier pour pouvoir l'exécuter (essaie la commande file). Dans le pire des cas, s'il arrive à déterminer qu'il s'agit d'un script shell sans savoir lequel en particulier, il est fort probable que le bash soit défini comme étant ton shell de connexion et que ce soit donc lui qui soit sollicité par défaut.
      • [^] # Re: /bin/bash

        Posté par  . Évalué à 2.

        la réponse avec un ls -al /bin/sh
        • [^] # Re: /bin/bash

          Posté par  . Évalué à 1.

          Ouaip ! Ta commande m'indique bien dash, qui est, d'après une recherche rapide, le nouveau shell par défaut de Ubuntu (Edgy).
          d'après ce lien ; http://forum.ubuntu-fr.org/viewtopic.php?id=80697

          Apparemment il est plus mieux bien (certains diront meilleur) que bash niveau vitesse et mémoire. Mais ça entraîne des problèmes dans les scripts où y'a des éléments spécifiques au bash, comme le mien apparemment (et surtout des trucs plus importants genre driver).


          Merci beaucoup. Maintenant, je n'ai plus qu'à regarder vite fait ce dash :)


          Vous êtes bons :)

Suivre le flux des commentaires

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