Fichier bash avec find ne fonctionne pas

Bonsoir à tous,

J’ai créé un fichier bash:

[code]cd /Dossiers/anne
find . -type d -exec chown -R anne:vicfel9395 --preserve-root {} ;
find . -type f -exec chown -R anne:vicfel9395 --preserve-root {} ;
find . -type d -exec chmod -R 760 --preserve-root {} ;
find . -type f -exec chmod -R 760 --preserve-root {} ;

cd /Dossiers/francois
find . -type d -exec chown -R francois:vicfel9395 --preserve-root {} ;
find . -type f -exec chown -R francois:vicfel9395 --preserve-root {} ;
find . -type d -exec chmod -R 760 --preserve-root {} ;
find . -type f -exec chmod -R 760 --preserve-root {} ;[/code]

Quand je l’exécute, ça ne fonctionne pas.

Par contre quand je rentre les lignes une par une en console, c’est bon. :confused:

Quelqu’un a une idée?

Essaye en remplaçant dans le fichier bash [mono];[/mono] par [mono];[/mono].
De mémoire le [mono][/mono] est uniquement utile dans un shell interactif.

Merci, :wink:

J’ai essayé mais toujours pareil.

A noter que quand je lance le fichier dans la console ( avec la commande bash fichier.sh ), ça fonctionne… :think:

Dans quelle situation ton script ne fonctionne pas ?
Quand tu le lances directement après l’avoir rendu exécutable, via une commande similaire à la suivante ?

Commence par ajouter cette ligne au début du script, pour indiquer qu’il doit être exécuté avec bash et regarde si ça change quelque chose :


Au fait, j’ai déplacé ce fil dans la section “Programmation” pour attirer l’œil des codeurs.

“Ça ne fonctionne pas”, c’est un peu vague comme problème. Qu’attends-tu ? Quel est le retour ? As-tu un message d’erreur ? Lequel ?
Peux-tu donner le contenu exact de ton fichier script, avec les permissions associées ?

[quote=“vv222”]Dans quelle situation ton script ne fonctionne pas ?
Quand tu le lances directement après l’avoir rendu exécutable, via une commande similaire à la suivante ?[/quote]
non, quand clique à droite sur le fichier dans l’explorateur et que je choisis “executer”.

[quote=“vv222”]Commence par ajouter cette ligne au début du script, pour indiquer qu’il doit être exécuté avec bash et regarde si ça change quelque chose :
Code:
#!/bin/bash[/quote]
Pareil

merci… :wink:

[quote=“Dunatotatos”]“Ça ne fonctionne pas”, c’est un peu vague comme problème. Qu’attends-tu ? Quel est le retour ? As-tu un message d’erreur ? Lequel ?
Peux-tu donner le contenu exact de ton fichier script, avec les permissions associées ?[/quote]
Pas de message d’erreur, mais les permissions des fichiers ne sont pas changés par les commandes du fichier bash…

Il manque toujours le contenu exact du script, et les permissions associées ($ cat ton_script.sh ; ls -lArth ton_script.sh)

Au hasard, je dirais que modifier un owner nécessite les droits root, et que tu exécutes ton script en tant que simple user.

[code]#!/bin/bash

cd /home/anne
find . -type d -exec chmod -R 760 --preserve-root {} ;
find . -type f -exec chmod -R 760 --preserve-root {} ;
find . -type d -exec chown -R anne:vicfel9395 --preserve-root {} ;
find . -type f -exec chown -R anne:vicfel9395 --preserve-root {} ;

cd /home/francois
find . -type d -exec chmod -R 760 --preserve-root {} ;
find . -type f -exec chmod -R 760 --preserve-root {} ;
find . -type d -exec chown -R francois:vicfel9395 --preserve-root {} ;
find . -type f -exec chown -R francois:vicfel9395 --preserve-root {} ;

cd /Dossiers/anne
find . -type d -exec chmod -R 760 --preserve-root {} ;
find . -type f -exec chmod -R 760 --preserve-root {} ;
find . -type d -exec chown -R anne:vicfel9395 --preserve-root {} ;
find . -type f -exec chown -R anne:vicfel9395 --preserve-root {} ;

cd /Dossiers/francois
find . -type d -exec chmod -R 760 --preserve-root {} ;
find . -type f -exec chmod -R 760 --preserve-root {} ;
find . -type d -exec chown -R francois:vicfel9395 --preserve-root {} ;
find . -type f -exec chown -R francois:vicfel9395 --preserve-root {} ;
[/code]

Oui tu dois avoir raison.

Y’a pas un moyen de le lancer en tant qu’utilisateur?

Via sudo, tu peux permettre à n’importe quel utilisateur de lancer une certaine commande.
Ou alors, tu lances ton script en tant que root.

[quote=“Dunatotatos”]Via sudo, tu peux permettre à n’importe quel utilisateur de lancer une certaine commande.
Ou alors, tu lances ton script en tant que root.[/quote]
Ok mais je voulais dire sans passer par la console…

gksu

Il fonctionne comme sudo (ou su, selon l’implémentation), mais ouvre une fenêtre plutôt que de lire stdin.

[quote=“Dunatotatos”]gksu

Il fonctionne comme sudo (ou su, selon l’implémentation), mais ouvre une fenêtre plutôt que de lire stdin.[/quote]
Je comprends pas trop. J’ouvre l’explorateur de fichier et comment je fais après?

Nan, gksu va dans ton script.

Comme ton explorateur de fichier est exécuté en user simple, ton script doit acquérir les droits root. Pour ça, les commandes qui nécessitent le droit root doivent être précédées de “gksu”.

Un exemple vite fait.
Ce script ressemble à ce que tu as écrit pour le moment :

$ cat script.sh #!/bin/sh ls /root

Si tu l’exécutes en tant que simple user, tu as des problèmes de droits :

$ ./script.sh ls: cannot open directory /root: Permission denied

Si tu l’exécutes en tant que root, ça marche :

# ./script iptables.sh

L’idée est donc de récupérer les droits root au sein de ton script, même lorsqu’il est exécuté en simple user :

$ cat script.sh #!/bin/sh su -c 'ls /root' $ ./script.sh Password: #Ici, on tape le mot de passe root iptables.sh

Ça marche aussi avec sudo :

$ cat script.sh #!/bin/sh sudo ls /root $ ./script.sh [sudo] password for dunatotatos: #Ici, on tape le mot de passe de l'utilisateur simple iptables.sh

Le problème est que la demande de mot de passe se fait dans un terminal. Tu veux tout faire en graphique, donc il faut demander le mot de passe dans une interface graphique. gksu fait ça :

$ cat script.sh #!/bin/sh gksu ls /root $ ./script.sh #Juste après le lancement, une fenêtre s'ouvre demandant le mot de passe root iptables.sh

[quote=“Dunatotatos”]
Le problème est que la demande de mot de passe se fait dans un terminal. Tu veux tout faire en graphique, donc il faut demander le mot de passe dans une interface graphique. gksu fait ça :

$ cat script.sh #!/bin/sh gksu ls /root $ ./script.sh #Juste après le lancement, une fenêtre s'ouvre demandant le mot de passe root iptables.sh[/quote]
Oui mais c’est toujours en console, je peux pas le faire directement dans l’explorateur nan?

???
Tu adaptes ton script tel qu’indiqué, puis tu le lances en cliquant dessus depuis ton navigateur…

C’est ce que j’ai fait, mais pas de fenêtre de demande de mot de passe.

J’ai remplacé gksu par sudo, rien non plus…

Et les permissions ont changé ?

Ça, c’est normal, comme expliqué au-dessus.

Avant de t’acharner à lancer ton script en interface graphique, utilise ta console. L’un des trucs les plus agaçants avec une interface graphique est le manque de feedback. Il y a manifestement une erreur dans ton script, mais l’interface graphique la cache. En console, elle est clairement écrite.
Une fois que ton script marche parfaitement, tu peux le lancer en cliquant dessus.

Bon j’ai simplifié le script ( il s’appelle q.sh):

[code]#!/bin/sh

sudo cd /home/anne

sudo find . -type f -exec chown -R anne:vicfel9395 --preserve-root {} ;[/code]

quand je le lance dans le terminal voilà le message:

francois@Wheezy:~/fichiers bash$ bash q.sh [sudo] password for francois: sudo: cd: command not found

??? :think:

sudo cd ce n’est pas possible
En revanche faire ton ‘cd’ sans sudo ça devrait fonctionner.
Mais comme on te l’a dit utilise gksu à la place de sudo et tu pourras démarrer ton script depuis ton navigateur.