# Fichier bash avec find ne fonctionne pas

**URL:** <https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173 "2016-02-21T22:17:02Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/1 "2016-02-21T22:17:02Z")

</div>

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. 😕

Quelqu’un a une idée?

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/2 "2016-02-21T22:17:02Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/3 "2016-02-21T22:17:03Z")

</div>

Merci, 😉

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:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/4 "2016-02-21T22:17:03Z")

</div>

> [@felvic](#):
>
> 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 ?

```auto
$ ./mon-script.sh
```

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 :

```auto
#!/bin/bash
```

* * *

Au fait, j’ai déplacé ce fil dans la section «&nbsp;Programmation&nbsp;» pour attirer l’œil des codeurs.

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/5 "2016-02-21T22:17:03Z")

</div>

“Ç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 ?

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/6 "2016-02-21T22:17:03Z")

</div>

[quote=«&nbsp;vv222&nbsp;»]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 «&nbsp;executer&nbsp;».

[quote=«&nbsp;vv222&nbsp;»]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

> [@vv222](#):
>
> Au fait, j’ai déplacé ce fil dans la section «&nbsp;Programmation&nbsp;» pour attirer l’œil des codeurs.

merci… 😉

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/7 "2016-02-21T22:17:04Z")

</div>

[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…

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/8 "2016-02-21T22:17:04Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/9 "2016-02-21T22:17:04Z")

</div>

> [@Dunatotatos](#):
>
> Il manque toujours le contenu exact du script, et les permissions associées ($ cat ton\_script.sh ; ls -lArth ton\_script.sh)

[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]

```auto
-rwxrw---- 1 francois vicfel9395 1,1K févr. 4 09:32 chown.sh
```

> [@Dunatotatos](#):
>
> 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.

Oui tu dois avoir raison.

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

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/10 "2016-02-21T22:17:04Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/11 "2016-02-21T22:17:04Z")

</div>

[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…

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/12 "2016-02-21T22:17:05Z")

</div>

gksu

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

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/13 "2016-02-21T22:17:06Z")

</div>

[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?

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/14 "2016-02-21T22:17:06Z")

</div>

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`

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/15 "2016-02-21T22:17:06Z")

</div>

[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?

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/16 "2016-02-21T22:17:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/17 "2016-02-21T22:17:07Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/18 "2016-02-21T22:17:07Z")

</div>

> [@felvic](#):
>
> C’est ce que j’ai fait, mais pas de fenêtre de demande de mot de passe.

Et les permissions ont changé ?

> [@](#):
>
> J’ai remplacé gksu par sudo, rien non plus…

Ç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.

---

<div class="post-metadata">

**Author:** ![felvic](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/e56c9b/32.png) [@felvic](https://www.debian-fr.org/u/felvic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/19 "2016-02-21T22:17:07Z")

</div>

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:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 10:17 UTC](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173/20 "2016-02-21T22:17:07Z")

</div>

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.

[Page suivante](https://www.debian-fr.org/t/fichier-bash-avec-find-ne-fonctionne-pas/68173.md?page=2)
