Erreur dans script bash alors que la commande fonctionne

Bonjour à toutes et à tous.

Voilà mon problème: je souhaite créer un script qui modifie les droits de tous les fichiers et dossiers compris dans le dossier /home/partage/, à l’exception de ceux se terminant par l’extension “.extension”.

J’utilise pour ce faire la commande :

Lorsque je l’exécute depuis la console cette commande marche très bien, mais lorsque je la place dans un script et que j’exécute ce dernier, je reçois un message d’erreur.

Voici mon script :

#!/bin/bash
chmod -R 1770 /home/partage/!(*.extension)

Et voici le code d’erreur lorsque je tente de l’exécuter:

./script: line 2: syntax error near unexpected token `('
./script: line 2: `chmod -R 1770 /home/partage/!(*.extension)'

Voilà si quelqu’un peut m’éclairer, merci.

Bon ben j’ai trouvé la solution,

je dois taper

plutôt que

Et ceci pour que le script s’exécute dans le même shell que dans lequel l’utilisateur se trouve (je crois).

Par contre je ne comprend absolument pourquoi cela ne fonctionne pas si le script est lancé dans un autre shell, si quelqu’un peut m’expliquer pourquoi je suis preneur. J’ai soif d’apprendre…

Ton shell, c’est bash ?

Je ne suis pas spécialiste, mais il semblerait que !(*.extension) ne fonctionne pas avec bash. D’après mon test « vite-fait »:

$ ls -l test/ total 0 -rw-r--r-- 1 kna kna 0 avr 22 17:23 fichier.ext1 -rw-r--r-- 1 kna kna 0 avr 22 17:23 fichier.ext2 $ chmod -R +x test/!(*.ext2) bash: !: event not found

Si tu lances ton script avec comme she-bang #!/bin/bash, c’est un shell bash qui sera lancé.
Si tu le lances dans ton shell, il sera executé dans… ton shell, donc différent si tu n’utilises pas bash, qui lui accepte apparemment ce genre de syntaxe.

Bonjour,

Il faut rajouter ceci au début de ton script :

Lorsque tu lance un script, il ne va pas lire le fichier .bashrc ou se trouve l’option (via /etc/bash_completion) donc peu d’option sont active.

@kna : Cela fonctionne en bash mais l’option n’est pas forcement active. Pour verifier si elle est active :

[quote]Ton shell, c’est bash ?

Je ne suis pas spécialiste, mais il semblerait que !(*.extension) ne fonctionne pas avec bash. [/quote]

Oui mon shell c’est bash, et depuis la console ça marche très bien, c’est quand je place la commande dans un script que j’ai des soucis.

[quote]
Bonjour,

Il faut rajouter ceci au début de ton script :

Nickel ça marche, merci micky, j’ai même compris pourquoi au passage, que demander de plus?

Hum je me gourre peut-être mais j’ai l’impression que ton script ne fait pas ce que tu attends :
je pense que c’est le bash qui complete !(*.extension) et pas chown.
Du coup, seul les fichiers du répertoire ou la commande est lancée voir ses .extension ignorés
et pas le reste de l’arborescence…
(mais j’ai pas testé)

Oui tu as tout à fait raison BBT1, je viens de m’en rendre compte et j’allais poster dans ce sens… Mais peut-être vaudrait-il mieux que j’ouvre un nouveau sujet?

Merci pour ta réponse.

Tu devrais pouvoir t’en sortir avec un find.
Si tu blockes, repostes dans le topic et je te le fais