Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/02/2009, à 21:26

Daddo

[résolu] [BASH] Attendre la fin d'une commande

Bonjour,

Je souhaite réaliser un script qui :
1- Monte une partition
2- Lance nautilus sur le répertoire de montage /media/test
[Entre temps l'utilisateur modifie les fichiers dans le point de montage]
3- A la fermeture de nautilus copie le contenu de /media/test vers une autre partition déjà montée
4- Démonte la partition

Ceci me permet d'archiver toutes les modifications faites à l'intérieur du répertoire.

J'avais fait un truc dans ce genre-là sous KDE, ça marchait très bien :

mount -t ntfs-3g /dev/sdb1 /media/test
konqueror /media/test
commandes_pour_archiver (des "mkdir", "rmdir", "mv" et "cp")
umount /media/test

J'ai refait le même script en remplaçant "konqueror" par "nautilus" et là ça ne marche plus : l'archivage est fait avant que l'utilisateur fasse les modifications, donc ça ne sert à rien. En fait après avoir lancé nautilus il n'attend pas sa fermeture, il passe immédiatement à la suite.

Et effectivement en lançant nautilus dans un terminal, il démarre en arrière plan et on reprend la main sur le prompt avant même de l'avoir fermé. Avec konqueror on n'obtient la main sur le prompt qu'une fois que konqueror est fermé.
Je suppose que c'est la source du problème.

Il faudrait trouver un système pour dire "ne poursuivre que lorsque nautilus est fermé". Une histoire de signal QUIT/EXIT, mais je ne sais pas quoi.

Merci de votre aide.

Dernière modification par Daddo (Le 08/03/2009, à 13:06)

Hors ligne

#2 Le 09/02/2009, à 23:19

hardball

Re : [résolu] [BASH] Attendre la fin d'une commande

salut !

très interessant comme probleme !

après avoir testé qq trucs, j'ai pas trouvé grand chose.

en lançant nautilus avec gksu en ayant créé un utilisateur spécialement pour ?
bof...

je dirais (mais ca dépend de l'utilisation que tu veux en faire) que passer par un nautilus script ca peut être pas mal :
tu créés un script "synchroniser et ejecter" que tu utiliserais à la place de éjecter dans le menu contextuel de l'icone du volume monté.


-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !

Hors ligne

#3 Le 10/02/2009, à 10:42

Totor

Re : [résolu] [BASH] Attendre la fin d'une commande

Plutôt que d'attendre la fin d'exécution de nautilus, pourquoi n'utilises-tu pas inotify pour monitorer les changements de ton point de montage.
Au moins, en cas d'inconvenus de nautilus, tes copies seront déjà réalisées.


-- Lucid Lynx --

Hors ligne

#4 Le 10/02/2009, à 23:16

Daddo

Re : [résolu] [BASH] Attendre la fin d'une commande

Merci smile

Je vais regarder inotify.
Mais si vous avez un truc pour ce fameux problème, je suis preneur aussi cool

Hors ligne

#5 Le 10/02/2009, à 23:21

geenux

Re : [résolu] [BASH] Attendre la fin d'une commande

Le problème vient du fait que nautilus se lance en arrière plan. La commande nautilus doit sans doute appeler un script shell qui lance nautilus.

Hors ligne

#6 Le 11/02/2009, à 09:44

durendal94

Re : [résolu] [BASH] Attendre la fin d'une commande

Bonjour,

- lancer nautilus en arrière plan.
- récupérer son pid
- et faire un wait du pid

A priori le but de wait est d'attendre la fin du process spécifié par le pid.
ce qui semble correspondre à ton besoin.

Bon courage.

Hors ligne

#7 Le 12/02/2009, à 22:52

Daddo

Re : [résolu] [BASH] Attendre la fin d'une commande

inotify c'est fait pour mais rien que pour l'envie de faire marcher mon petit script, je voudrais trouver la solution au problème big_smile

durendal94 a écrit :

Bonjour,

- lancer nautilus en arrière plan.
- récupérer son pid
- et faire un wait du pid

A priori le but de wait est d'attendre la fin du process spécifié par le pid.
ce qui semble correspondre à ton besoin.

Bon courage.

Ceci ne semble rien donner de mieux :

mount -t ntfs-3g /dev/sdb1 /media/test
nautilus /media/test &
wait $!
commandes_pour_archiver
umount /media/test

Tout est archivé immédiatement aussi neutral

Merci lol

Dernière modification par Daddo (Le 12/02/2009, à 22:53)

Hors ligne

#8 Le 13/02/2009, à 00:59

Totor

Re : [résolu] [BASH] Attendre la fin d'une commande

Au moment de son instanciation, nautilus doit se "détacher" de son processus père (soit en créant un nouveau processus, soit en effectuant l'équivalent d'un "disown")
Toujours est-il que le wait n'est pas approprié car nautilus n'est plus un job de ton script.

Après, si tu veux vraiment attendre la fin d'exécution de nautilus, ce n'est pas évident car il te faudra identifier très clairement le(s) processus inhérent(s) à ton lancement de nautilus puis de vérifier en permanence l'existence de ce(s) dernier(s).


-- Lucid Lynx --

Hors ligne

#9 Le 16/02/2009, à 17:44

Daddo

Re : [résolu] [BASH] Attendre la fin d'une commande

OK ben tant pis alors sad
Je vais voir avec inotify, mais ça me semble compliqué.

Hors ligne

#10 Le 16/02/2009, à 22:05

Totor

Re : [résolu] [BASH] Attendre la fin d'une commande

Daddo a écrit :

Je vais voir avec inotify, mais ça me semble compliqué.

pas tant que ça. Le 1er exemple de inotifywait (sans l'option m) devrait te permettre de faire ce que tu souhaites.


Note : inotify-tools se trouve dans les paquets universe/misc


-- Lucid Lynx --

Hors ligne