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 05/01/2014, à 18:41

sergeG75018

redémarrer un script.

bonjour.
J'ai besoin de redémarrer un script selon le cas, je m'explique.
Je me crais une  gui pour locate que j'utilise très souvent.
cette gui comprend une zone de texte à taper et 3 boutons.
un bouton anuler, un valider qui renvoie le texte en sortie et un bouton "update" qui permet la mise à jour de la base de donnée de locate.
Lorsque je lance cet update j'aimerai qu'a la fin le script reparte du début car pour l'instant il continu à etre lu.
j'ai bien vu la commande exec $0 mais je dois mal l'utiliser.
Si je ne suis pas assez clair, je peux vous mettre le script.
merci d'avance de vos conseils.


Ironie, sarcasme ou cynisme? Je ne sais plus

Hors ligne

#2 Le 06/01/2014, à 07:06

pingouinux

Re : redémarrer un script.

Bonjour,
Voici un exemple qui devrait correspondre à ce que tu veux faire. Tu peux éventuellement montrer ton script.

#!/bin/bash

read -p "On continue (o/n) ? " choix
[ "$choix" = o ] && { echo "On recommence"; exec "$0"; }
echo "On s'arrête"

Hors ligne

#3 Le 06/01/2014, à 10:15

sergeG75018

Re : redémarrer un script.

Bonjour pingouinux, toujours sur le pont.
Je voudrais qu'il reparte sans demande, d'une manière automatique.
Dans mon script j'ai un bouton qui lance un autre script (dans la même feuille), j'aimerais donc que le script principal redémarre à la fin de ce second script à l'heure actuelle il continue lire le script principal qui ne renvoie rien.
Pour les boutons j'utilise des "case/esac", j'ai essayé d'intégrer la fin du premier script dans les "case" mais je perd la sortie texte, J'ai essayer d'envoyer la sortie texte dans un fichier.txt mais je perd les "case"
Je mets le script car je ne vois plus quel synopsis utiliser pour y arriver.

#!/bin/bash

rech=$(
yad --title "Rechercher avec locate" \
--image=search \
--form \
--field "Ma recherche" \
--button="update:1" \
--button="gtk-ok:0" \--button="annuler:2"\
) 
	case $? in
			1)
				yad --width=300 \
				--title "Rechercher avec locate" \
				--no-buttons \
				--image=document-open-recent \
				--text "la mise à jour est en cours" \
				--text-align=center \
				& eog \
				&& killall yad \
				&& yad --width=300 \
				--title "Rechercher avec locate" \
				--button="gtk-close:1" \
				--image=search \
				--text "La mise à jour est terminée" \
				--text-align=center exec $0;;

			2)
				exit;;
	esac
marech=$(echo $rech | awk 'BEGIN {FS="|" } { print $1 }')
echo $marech
locate $marech > recherche
gedit recherche

Merci.

Dernière modification par sergeG75018 (Le 06/01/2014, à 10:17)


Ironie, sarcasme ou cynisme? Je ne sais plus

Hors ligne

#4 Le 06/01/2014, à 12:28

pingouinux

Re : redémarrer un script.

Je ne connais pas yad, mais voici une piste :
Es-tu sûr que le code de retour de la première ne peut être que 1 ou 2 ?
Comment appelles-tu le script ? Que donne echo "$0" en tête du script ?

Hors ligne

#5 Le 06/01/2014, à 14:14

sergeG75018

Re : redémarrer un script.

Pfff...........
Il manquait juste le retour à la ligne

--text-align=center 
          exec $0;;

Voilà comment perdre 1O heures.
merci beaucoup car j'ai appris quelques astuces aujourd'hui grace à toi.


Ironie, sarcasme ou cynisme? Je ne sais plus

Hors ligne

#6 Le 06/01/2014, à 22:34

metalux

Re : redémarrer un script.

Bonsoir,
Je profites de vos connaissances pour éclairer mes lanternes smile
J'avais pour habitude de relancer un script avec bash "$0" && exit 0. La commande exec, voudrait-elle dire que le script se réexécute depuis le début mais SANS lancer une autre instance de celui-ci?
Si c'est le cas, cela me simplifierais grandement la tâche dans bien des scripts.

Hors ligne

#7 Le 07/01/2014, à 01:47

Postmortem

Re : redémarrer un script.

Salut,
Il me semble que le script appelé par exec "remplace" en effet celui qui fait cet appel.
Une chose est sûre, ce qu'il y a derrière un exec (si le exec est appelé bien sûr) dans un script n'est pas exécuté.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 07/01/2014, à 07:26

pingouinux

Re : redémarrer un script.

En effet Postmortem, le shell en cours est bien remplacé.
Voici un extrait de help exec :

exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
    Replace the shell with the given command.

Hors ligne

#9 Le 07/01/2014, à 22:26

metalux

Re : redémarrer un script.

Je ne suis pas à l'aise pour comprendre l'anglais et un  man exec ne me retournait qu'une description imbuvable pour moi sad
Un help exec me retourne une description claire et de surcroît en français.
"Remplace le shell par la commande fournie.
    Exécute la COMMANDE, en remplaçant ce shell par le programme spécifiée.
    Les ARGUMENTS deviennent ceux de la COMMANDE. Si la COMMANDE n'est pas fournie,
    les redirections prennent effet dans le shell courant."

J'y penserai désormais en complément de man.
Merci à tous les 2 pour les infos.

Hors ligne

#10 Le 07/01/2014, à 22:43

pingouinux

Re : redémarrer un script.

man sert à obtenir un certain nombre de modes d'emploi (dont celui des commandes shell), help permet d'obtenir celui des "builtins"  (commandes internes au bash).

Dernière modification par pingouinux (Le 07/01/2014, à 22:46)

Hors ligne