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 30/12/2011, à 23:58

metalux

[Abandon]Script ne se termine pas proprement

Bonsoir,
j'ai réalisé un petit script qui me permet d'effectuer un zoom récursivement sur un dossier dont voici le code:

#!/bin/bash
choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%)
question=$(zenity --file-selection --directory --title="Sélectionnez le dossier auquel vous souhaitez appliquer le zoom")
choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)
find "$question" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \; -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \;
nautilus -q && nautilus "$question" &

Celui-ci semble fonctionner sauf, parfois, il reste dans les processus en cours et si je le tue, il y a 2 autres processus qui se lance(sans nom) dans le moniteur système que je n'arrive pas à terminer. je suis obligé dans ce cas de me déconnecter.
La ligne qui pose problème est la dernière.
nautilus -q seul fonctionne mais nautilus "$question" & fait planter (pas toujours).

Dernière modification par metalux (Le 26/02/2012, à 01:13)

Hors ligne

#2 Le 20/02/2012, à 20:35

cracolinux

Re : [Abandon]Script ne se termine pas proprement

En effet ! chez moi, ça me génère des fenêtres nautilus en chaîne ! je dois ensuite arrêter le carnage à coup de kill !

Est-ce que tu as déjà eu ça ?

1ere question : pourquoi nautilus -q ?
2eme question : chez moi, je n'obtiens pas les zooms attendus et chez toi ?

sinon, avec

( nautilus "$question" ) &

j'ai plus le problème

Tu devrais aussi prévoir des sorties de script (exit) en cas de non réponse ou de annuler

Dernière modification par cracolinux (Le 20/02/2012, à 20:39)


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#3 Le 20/02/2012, à 23:10

metalux

Re : [Abandon]Script ne se termine pas proprement

Tu as donné la réponse à la 1ère question avec ta 2ème question. Les zooms sont effectués correctement qu'après un redémarrage de nautilus sinon les attributs de gvfs sont mal pris en compte, d'où le nautilus -q. Donc si tu veux obtenir les zooms attendus, il te faut absolument garder nautilus -q dans le script.

ça me génère des fenêtres nautilus en chaîne !

Non, je n'ai jamais rencontré ça. Je ne comprend pas, nautilus étant lancé qu'une fois en principe.

[sinon, avec ( nautilus "$question" ) & j'ai plus le problème

Pas de changement dans mon cas. D'ailleurs, ce que je comprend le moins, c'est le caractère aléatoire, parfois ça fonctionne, parfois non hmm.
Les () étaient sensés faire quoi?
Maintenant que je me suis un peu plus documenté, je m'aperçois que le & à la fin ne sert à rien dans ce cas.

Tu devrais aussi prévoir des sorties de script (exit) en cas de non réponse ou de annuler

Oui, je vais étudier comment le faire. Faut-il s'y prendre un peu comme dans ton script "C dans l'air"?
Ce que je voulais en fait, c'est redémarrer Nautilus sur le dossier auquel le zoom est appliqué.
Le script fonctionne bien chez moi en supprimant && nautilus "$question" &
idée d'amélioration: utiliser la variable nautilus $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS pour effectuer directement le zoom à partir d'un clic droit (mais je n'y suis pas arrivé).

Hors ligne

#4 Le 21/02/2012, à 00:15

cracolinux

Re : [Abandon]Script ne se termine pas proprement

Voici une méthode possible :

if tonchoice=$(zenity --list  --column="Choix :" "tata" "toto" "tutu") && [[ -n $tonchoix ]]
then
    .....
else
exit 0
fi

ici, c'est le

 [[ -n $tonchoix ]]

qui est important, ça veut dire si la variable tonchoix est vide...ainsi, le programme se poursuit dans la partie else du bloc if - fi


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#5 Le 21/02/2012, à 23:46

metalux

Re : [Abandon]Script ne se termine pas proprement

Bon, voilà le script réécrit avec les sorties en cas d'appui sur le bouton annuler dans zenity:

#!/bin/bash
question=$(zenity --file-selection --directory --title="Sélectionnez le dossier auquel vous souhaitez appliquer le zoom")
if [ $? -eq 1 ];then
exit 0
fi

choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%)
choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)

if [[ -n $choix ]] && [[ -n $choix2 ]]; then
find "$question" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \; -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \;
elif [[ -n $choix ]]; then
find "$question" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \;
elif [[ -n $choix2 ]]; then
find "$question" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \;
else exit 0
fi
nautilus -q
exit 0

J'ai utilisé le résultat de la sortie pour la sélection du dossier (avec [[ -n $question ]] je n'ai pas réussi à faire un code lisible).
Néanmoins, je trouve le code un peu à rallonge et je reste persuadé qu'il y avait moyen de faire plus simple.
Des suggestions?
Concernant Nautilus, je n'ai toujours aucune piste, Peut-être un sleep entre les 2 commandes, de façon que nautilus soit bien fermé avant de redémarrer (bien que && veut bien dire exécute la 2ème commande que si la 1ère est ok, non?)

Hors ligne

#6 Le 22/02/2012, à 00:31

cracolinux

Re : [Abandon]Script ne se termine pas proprement

Dommage de devoir quitter nautilus..


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#7 Le 22/02/2012, à 01:33

twocats

Re : [Abandon]Script ne se termine pas proprement

#!/usr/bin/env bash

question=$(zenity --file-selection --directory --title="Sélectionnez le dossier auquel vous souhaitez appliquer le zoom") || exit

choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%)

choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)

if [[ -n $choix ]]
then
    find "$question" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \;
fi

if [[ -n $choix2 ]]
then
    find "$question" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \;
fi
nautilus -q

À tester.


La réponse est 42

Hors ligne

#8 Le 23/02/2012, à 03:24

metalux

Re : [Abandon]Script ne se termine pas proprement

La solution proposée par twocats fonctionne également, seule une sortie est prévue pour le choix du dossier, aucun exit n'étant proposé dans la suite du script.
j'ai appris 3 manières de faire un exit, me rectifier si je les ai mal interprétées:
1-en testant si la chaîne est non vide sinon...
2-en récupérant le retour de la commande
3-avec || qui exécute la 2ème commande que si la première échoue.

Tu devrais aussi prévoir des sorties de script (exit) en cas de non réponse ou de annuler]

Le script fonctionnant avec aucun exit, un seul(version de twocats) ou sur chaque cas(post #5), j'avoue être un peu perdu. Est-ce indispensable? Quel est l'intérêt?
Sinon pour Nautilus, toujours aucune idée? Je me contenterai de fermer nautilus à défaut mais ça serait plus sympa de pouvoir ré-ouvrir sur le dossier auquel on vient d'appliquer le zoom.

Hors ligne

#9 Le 23/02/2012, à 11:51

cracolinux

Re : [Abandon]Script ne se termine pas proprement

Par exemple pour les questions choix et choix2, si tu cliques «annuler» ... que se passe t-il ?

Ça n’empêche pas le script de fonctionner correctement lorsque que tu réponds normalement mais le script n'est alors pas vraiment «complet»...c'est pas méchant hein, mais bon.

Pour ce qui est de nautilus, ici ça fonctionne même si ça serait mieux de faire le changement en direct, comme une espèce de rafraîchissement. Mais je sais pas faire.


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#10 Le 23/02/2012, à 20:58

metalux

Re : [Abandon]Script ne se termine pas proprement

Pour choix,si je clique sur "annuler", le script continue à se poursuivre au choix2. Il n'y a aucune différence (apparente en tout cas) entre les différentes versions (avec ou sans exit). Le script n'est plus dans les processus en cliquant sur "annuler" même sans prévoir d'exit. Cependant, d'après toi, il vaut mieux gérer les sorties (bonne habitude à prendre) d'après ce que je comprend.
Twocats a simplifié en supprimant 

if [[ -n $choix ]] && [[ -n $choix2 ]]

, par contre je suis bien obligé de le garder si je souhaite gérer toutes les sorties, n'est-ce pas?

Pour nautilus, ça y est! Tu m'as mis sur la bonne voie "Rafraîchissement".
Je n'ai pas encore trouvé comment remplacer la touche F5 de Nautilus(rafraîchissement) mais en remplaçant nautilus -q par

gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop false
gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop true

ça fonctionne. Plus besoin de quitter nautilus!
Ouah, t'es un dieu cracolinux!!!! big_smile
Par contre, je me pose la question de la portabilité sur les versions récentes, ayant cru voir que gconf était remplacé par dconf, quelqu'un pour me confirmer si ça marche à partir d'Ubuntu 11.04 et +?

Hors ligne

#11 Le 23/02/2012, à 21:07

cracolinux

Re : [Abandon]Script ne se termine pas proprement

Tu peux simplement faire comme pour la première question et ajouter un :

|| exit

aux autres questions.


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#12 Le 23/02/2012, à 22:52

metalux

Re : [Abandon]Script ne se termine pas proprement

Voici la version finale à utiliser en nautilus-script:

#!/bin/bash
# @(#) Zoom récursif
# ce script permet de faire un zoom récursivement à partir d'un dossier. Il suffit de se placer dans le dossier auquel on souhaite appliquer le zoom et de l'appeler à partir d'un clic droit. Ne pas oublier de le mettre dans le dossier ~/.gnome2/nautilus-scripts et de le rendre exécutable.
# Réalisé grâce à Ansuzpeorth (m'a donné l'envie de me mettre aux scripts), Alej(initiation à gvfs), twocats(pour la simplification du script) et tout particulièrement cracolinux qui s'est révélé être un professeur remarquable. Merci à eux.   
cd $NAUTILUS_SCRIPT_CURRENT_URI
dossier=$(pwd)
choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%)
choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)
if [[ -n $choix ]]; then
find "$dossier" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \; || exit
fi
if [[ -n $choix2 ]]; then
find "$dossier" -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \; || exit
fi
gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop false
gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop true
exit 0

Ne pas oublier un petit F5 pour rafraîchir la page.
Une dernière question: Pourquoi dossier=$pwd ne fonctionne pas et qu'il faut dossier=$(pwd)? Je l'ai mis sans trop comprendre ce que je faisais.
Merci à vous deux.
Edit: Je viens d'essayer en Vbox avec Oneiric: Nautilus ne propose plus l'agencement compact ou je rêve? Pour le zoom par contre c'est ok.

Dernière modification par metalux (Le 23/02/2012, à 23:25)

Hors ligne

#13 Le 24/02/2012, à 00:04

twocats

Re : [Abandon]Script ne se termine pas proprement

#!/usr/bin/env bash

cd ${NAUTILUS_SCRIPT_CURRENT_URI}

choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%)

choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)

[[ -n $choix ]] && gvfs-set-attribute . metadata::nautilus-icon-view-zoom-level $choix

[[ -n $choix2 ]] && gvfs-set-attribute . metadata::nautilus-icon-view-tighter-layout $choix2

gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop false
gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop true

À tester.


La réponse est 42

Hors ligne

#14 Le 24/02/2012, à 00:27

cracolinux

Re : [Abandon]Script ne se termine pas proprement

Une dernière question: Pourquoi dossier=$pwd ne fonctionne pas et qu'il faut dossier=$(pwd)

sous cette forme $(pwd), tu as une substitution de commande, c'est à dire que la valeur de la commande pwd sera utilisé.
avec la forme $PWD, il s'agit ici d'utiliser la variable d'environnement PWD en majuscule.

Une commande pwd et une variable PWD


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#15 Le 24/02/2012, à 20:58

metalux

Re : [Abandon]Script ne se termine pas proprement

@twocats
Dans ta dernière proposition, je perd la récursivité (pas de find) or c'est ce qui m'intéresse (sinon j'utiliserais simplement le bouton zoom intégré à nautilus). Du coup, j'ai essayé une ligne du type

[[ -n $choix ]] && find . type d -exec gvfs-set-attribute . metadata::nautilus-icon-view-zoom-level $choix

mais ça ne marche pas.
Une autre proposition peut-être, le script se simplifiant de plus en plus, ce qui n'est pas pour me déplaire.
@cracolinux
Encore une leçon d'acquise, merci.

Pour ce qui est de l'agencement compact, il semblerait qu'elle soit retirée de nautilus 3.2.0. Ils marchent sur la tête ou quoi les dev en ce moment? Pourquoi l'avoir retirée??? mad

Dernière modification par metalux (Le 24/02/2012, à 21:32)

Hors ligne

#16 Le 24/02/2012, à 23:20

twocats

Re : [Abandon]Script ne se termine pas proprement

#!/usr/bin/env bash

cd ${NAUTILUS_SCRIPT_CURRENT_URI}

choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%)

choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)

[[ -n $choix ]] && find . -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \;

[[ -n $choix2 ]] && find . -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \;

gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop false
gconftool-2 –type boolean –set /apps/nautilus/preferences/show_desktop true

La réponse est 42

Hors ligne

#17 Le 26/02/2012, à 01:11

metalux

Re : [Abandon]Script ne se termine pas proprement

C'était bien ça twocats, pourtant j'étais persuadé d'avoir essayé cette commande en 1er avant celle que j'ai posté, sans doute ais-je fais une erreur de syntaxe. Voici finalement le script terminé et simplifié.

#!/usr/bin/env bash
          #####################
          # --Zoom récursif-- #
          #####################

# ce script permet de faire un zoom récursivement à partir d'un dossier. Il suffit de se placer dans le dossier auquel on souhaite appliquer le zoom et de l'appeler à partir d'un clic droit. Ne pas oublier de le mettre dans le dossier ~/.gnome2/nautilus-scripts et de le rendre exécutable.
#################################################################################################################################################################
# Réalisé grâce à Ansuzpeorth (m'a donné l'envie de me mettre aux scripts), Alej(initiation à gvfs), twocats(pour la simplification du script) et tout particulièrement cracolinux qui s'est révélé être un professeur remarquable. Merci à vous.
#################################################################################################################################################################

choix=$(zenity --list --radiolist --text "Veuillez choisir le niveau de zoom désiré" --column="Choix" --column="" --column="Niveau de zoom" --hide-column="2" FALSE 0 33% FALSE 1 50% FALSE 2 66% TRUE 3 100% FALSE 4 150% FALSE 5 200% FALSE 6 400%) 

choix2=$(zenity --list --radiolist --text "Veuillez choisir le type d'agencement" --column="choix" --column="resultat" --column="Agencement" --hide-column="2" TRUE "false" Normal FALSE "true" Compact)

[[ -n $choix ]] && find . -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-zoom-level $choix \; ||

[[ -n $choix2 ]] && find . -type d -exec gvfs-set-attribute {} metadata::nautilus-icon-view-tighter-layout $choix2 \; || exit

nautilus -q 

cd ${NAUTILUS_SCRIPT_CURRENT_URI} n'est finalement pas obligatoire, le . (point) étant bien pris en compte comme répertoire. J'ai rajouté une sortie en cas d'appui sur annuler dans les 2 fenêtres de zenity. Par contre, j'ai été obligé de réintégrer nautilus -q m'étant aperçu entre temps que la récursivité ne s'effectuait pas correctement dans tous les sous-répertoires avec la commande précédemment utilisée.
Mon problème de départ n'est donc pas résolu et  je passe le sujet en abandon mais j'ai énormément appris grâce à vous 2 au cours de cette semaine.
Encore merci pour votre aide.

Dernière modification par metalux (Le 26/02/2012, à 01:16)

Hors ligne