#1 Le 28/07/2008, à 18:32
- omnimax
besoin d'aide pour un nautilus script
Bonjour,
j'aimerai savoir comment récupérer le chemin complet et le nom du fichier lorsqu'on effectue un clic droit sur celui-ci
exemple je clique droit sur lossier images de vacances dans home, et le script me retournerait
/home/toto/images_de_vacances
Dernière modification par greg2007 (Le 29/07/2008, à 17:02)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#2 Le 28/07/2008, à 19:56
- WW
Re : besoin d'aide pour un nautilus script
Salut,
C'est pour faire un script nautilus?? Si oui c'est juste stocké dans le tableau $*.
Pour le premier paramètre utilise $1.
Sinon dis nous dans quel langage tu travaille??
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#3 Le 28/07/2008, à 22:18
- omnimax
Re : besoin d'aide pour un nautilus script
oui merci c'est en bash pour nautilus scripts, mais je ne comprends pas bien ton explication
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#4 Le 29/07/2008, à 08:00
- omnimax
Re : besoin d'aide pour un nautilus script
parce que si je suis ton raisonnement, je devrais voir apparaitre dans xterm mon fichier (je fais le test sur mon bureau)
essai avec $1
#!/bin/bash
xterm 'echo $1'
exit 0
essai avec $*
#!/bin/bash
xterm 'echo $*'
exit 0
hors, ce qui apparait est juste l'endroit où je me situe, et non le nom du fichier/et ou dossier
Dernière modification par greg2007 (Le 29/07/2008, à 08:04)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#5 Le 29/07/2008, à 10:04
- WW
Re : besoin d'aide pour un nautilus script
Salut,
J'ai fais des tests en fait si tu fais juste :
#!/bin/sh
zenity --info --text="chemin : $1"
exit 0;
Il te renvoie juste le nom du fichier car le chemin est relatif (si tu fais des traitements le script trouvera le fichier car pour le lancer l'utilisateur fais un clic droit sur le fichier ce qui permet au script d'avoir le "bon" chemin relatif) pas très claire peut être:P
Si tu veux le chemin absolu tu fais :
#!/bin/sh
zenity --info --text="chemin : $PWD/$1"
exit 0;
Là il récupère c'est où tu es c'est le but de la variable d'environement $PWD (path work directory) puis il concatène "/" + le nom de ton fichier à la fin.
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#6 Le 29/07/2008, à 10:31
- omnimax
Re : besoin d'aide pour un nautilus script
je confirme ça marche MAIS
ce que je voudrais c'est récupérer le nom du fichier pour l'inclure dans une autre commande....en fait je ne veux pas que zenity m'affiche le nom
je voudrais pouvoir assigner $ à la variable du fichier
d'ailleurs ce que je ne comprends pas c'est que ta ligne reprend le même principe que ma ligne plus haut et pourtant avec echo ça ne renvoit rien, alors qu'avec zenity on a le résultat....
Où est l'erreur?
tu comprends si avec echo je sais que j'ai un résultat, alors la commande marche et il me sera alors facile de récupérer la donnée avec la commande cut
Dernière modification par greg2007 (Le 29/07/2008, à 10:33)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#7 Le 29/07/2008, à 10:50
- WW
Re : besoin d'aide pour un nautilus script
"je voudrais pouvoir assigner $ à la variable du fichier" -> là c'est moi qui comprends pas.
Tu veux un truc du genre $images_de_vacances = /home/toto/images_de_vacances.
J'ai essayé avec gnome-terminal -x ... ça marchais sauf qu'il ouvrait la fenêtre et la refermé aussi tôt. C'est peut être pareil avec xterm.
Et le nom du fichier tu l'as dans $PWD/$1 donc si tu veux le récupérer pour une autre commande tu fais
monFichier="$PWD/$1"
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#8 Le 29/07/2008, à 11:05
- omnimax
Re : besoin d'aide pour un nautilus script
tu as raison et pour en être sur j'ai écrit ceci pour prendre la dernière commande dans l'historique de la console et ça marche
#!/bin/bash
echo "chemin : $1" >> ~/.bash_history
xterm
exit 0
merci pour ton aide
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#9 Le 29/07/2008, à 11:15
- WW
Re : besoin d'aide pour un nautilus script
De rien, n'oubli pas de le passer en [Résolu].
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#10 Le 29/07/2008, à 11:33
- omnimax
Re : besoin d'aide pour un nautilus script
encore juste une question
en fait le but est de faire :
mv -i $PWD/$1 $destination
comment faire pour que s'y il y a un fichier qui porte le même nom dans le répertoire, une boite zenity apparaisse demandant de confirmer ou non l'écrasement de ce fichier
oui : confirme
non :arrête le script
et qu'a contrario si aucun fichier ne porte le même nom, la commande s'effectue sans rien afficher du tout(pas de zenity)?
ce sont des questions basiques (les soluces sont sur la doc) mais si tu m'expliquais dans ce cas présent ce serait plus parlant pour moi, si tu sais expliquer juste les 2 possibilités,
pour afficher zénity pas de problème je connais
Dernière modification par greg2007 (Le 29/07/2008, à 11:34)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#11 Le 29/07/2008, à 11:36
- omnimax
Re : besoin d'aide pour un nautilus script
en fait ce script existe tout fait mais j'aimerai le créer moi-même pour comprendre chacune des choses que je mets en place
Dernière modification par greg2007 (Le 29/07/2008, à 11:37)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#12 Le 29/07/2008, à 12:37
- omnimax
Re : besoin d'aide pour un nautilus script
en fait le script est le suivant pour l'instant:
#!/bin/bash
destination=`zenity --title="choisir le dossier pour déplacer" --file-selection --directory`
mv -i $PWD/$1 $destination
exit 0
mais il me manque les lignes de codes stipulant que faire si un fichier existe déja (d'ailleurs le script ne marche pas si pareil cas se présente)
deuxio il manque aussi l'éventualité que l'on arrive pas à déplacer ou renommer le fichier pour une question de droits, là encore il faudrait être averti via du zenity
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#13 Le 29/07/2008, à 12:52
- WW
Re : besoin d'aide pour un nautilus script
Il faut tester la présence du fichier dans le répertoire de destination avec
if [ ! -e $destination/$1 ]
Code complet :
#!/bin/sh
destination="$HOME"
chemin="$PWD/$1" # On récupère le chemin absolu du fichier (marche pour les fenêtres nautilus, pas pour le Bureau directement, par contre on peux à partir de $HOME/Desktop)
if [ ! -e $destination/$1 ]; then # Si le fichier n'existe pas dans destination
mv $chemin $destination # on le déplace
else # Sinon
zenity --question --title="~ Ecraser ~" --text="Le fichier $1 existe déjà dans $destination. Voulez-vous l'écraser ?" # On pose la question
if [ $? = "0" ]; then # Si la réponse est oui
mv -f $chemin $destination # On écrase
fi
fi
exit 0;
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#14 Le 29/07/2008, à 14:48
- omnimax
Re : besoin d'aide pour un nautilus script
merci beaucoup, j'ai bien compris
cette page m'a d'ailleurs beaucoup aidé à comprendre tes lignes
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP2003/tp03.html
if [ $? = "0" ] signifie donc valider
j'ai adapté à mes goûts en conservant le choix via zenity parce que sinon $home l'envoit n'importe où dans mon home
#!/bin/bash
destination=`zenity --title="choisir le dossier" --file-selection --directory`
chemin="$PWD/$1"
if [ ! -e $destination/$1 ]; then
mv $chemin $destination
else
zenity --question --title="Attention" --text="Le fichier $1 existe déjà
Voulez-vous l'écraser ?"
if [ $? = "0" ]; then
mv -f $chemin $destination
fi
fi
exit 0;
je l'utilise donc uniquement avec nautilus puisque directement via le bureau cela ne marche pas
mais je ne comprends pas pourquoi ce n'est pas possible, parce que si on prends un fichier du bureau
sa localisation est pourtant bien /home/toto/Desktop/fichier
donc pourquoi ne veut-il pas le déplacer?
Dernière modification par greg2007 (Le 29/07/2008, à 14:50)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#15 Le 29/07/2008, à 15:14
- WW
Re : besoin d'aide pour un nautilus script
Pour if [ $? = "0" ] :
$? contient le résultat de la dernière commande exécutée or dans notre cas la ligne qui précède est : zenity --question --title="Attention" --text="Le fichier $1 existe déjà
Voulez-vous l'écraser ?"
Quand l'utilisateur clique sur Annuler le résultat sera 1 et quand il clique sur valider le résultat sera 0.
Pour "sa localisation est pourtant bien /home/toto/Desktop/fichier" : Oui, mais si tu fais des tests tu verra que la valeur renvoyée par un clic droit est /home/toto/Desktop certainement à cause d'une question de focus.
Lorsque tu clique sur un fichier du Bureau c'est le Bureau qui à le focus et non Nautilus.
Même si le Bureau est dans l'arborescence de Nautilus.
Le Bureau est un dossier spécial, par exemple lorsque tu utilise nautilus-open-terminal (un script nautilus justement) directement sur le Bureau il t'ouvre le terminal dans ton home(comportement par défaut). Alors quand passant par Raccourcis>Bureau puis open-terminal il ouvre ~/Desktop.
Edit : J'allais oublier : http://abs.traduc.org/abs-5.3-fr/
Dernière modification par WW (Le 29/07/2008, à 15:15)
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#16 Le 29/07/2008, à 15:33
- omnimax
Re : besoin d'aide pour un nautilus script
ok j'ai compris, j'ai même essayé de faire la solution inverse : le copiers vers en m'inspirant des arguments que j'avais trouvés sur la page que j'avais citée plus haut
le code est le suivant mais ne fonctionne pas, tu peux me dire pour quelle raison ? je crois pourtant avoir tout respecté dans la structure du script
#!/bin/bash
destination=`zenity --title="choisir le dossier pour copier" --file-selection --directory`
chemin="$PWD/$1"
if [ ! -e $destination/$1 ]; then
cp $chemin $destination
else
if [ ! $chemin -nt $destination/$1 ]; then
zenity --question --title="remplacer" --text="$1 est plus récent que la destination.
voulez-vous le remplacer?"
if [ $? = "0" ]; then
cp -f $chemin $destination
fi
else [ ! $chemin -ot $destination/$1 ]; then
zenity --question --title="remplacer" --text="$1 est plus ancien que la destination.
voulez-vous le remplacer?"
if [ $? = "0" ]; then
cp -f $chemin $destination
fi
fi
exit 0;
Dernière modification par greg2007 (Le 29/07/2008, à 15:34)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#17 Le 29/07/2008, à 15:38
- omnimax
Re : besoin d'aide pour un nautilus script
et merci pour la page...et si tu en as marre de me répondre, je comprendrais aussi, pas de soucis d'autant que tu m'as super aidé aujourd'hui
si tu connais pas, en cadeau pour te remercier, un super site pour de très beaux fond d'écran(il y en a pour tous les gouts):
http://interfacelift.com/wallpaper_beta/downloads/date/any/
Dernière modification par greg2007 (Le 29/07/2008, à 15:41)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#18 Le 29/07/2008, à 16:07
- WW
Re : besoin d'aide pour un nautilus script
Je vais plus avoir le temps de t'aider aujourd'hui mais déjà il te manque un if ici : else [ ! $chemin -ot $destination/$1 ]; then
elif [ ! $chemin -ot $destination/$1 ]; then
Merci, pour les wallpaper.
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#19 Le 30/07/2008, à 12:49
- omnimax
Re : besoin d'aide pour un nautilus script
j'ai mofifié comme ceci mais cela ne marche touhours pas....je comprends vraiment pas....
ps j'adore ton message de profil, il ya beaucoup de gens qui oublient qu'ils ont été débutant...en plus débutant ou confirmé face àla titegoogle ça veut rien dire
#!/bin/bash
destination=`zenity --title="choisir le dossier pour copier" --file-selection --directory`
chemin="$PWD/$1"
if [ ! -e $destination/$1 ]; then
cp $chemin $destination
else
if [ ! $chemin -nt $destination/$1 ]; then
zenity --question --title="remplacer" --text="$1 est plus récent que la destination.
voulez-vous le remplacer?"
if [ $? = "0" ]; then
cp -f $chemin $destination
fi
elif [ ! $chemin -ot $destination/$1 ]; then
zenity --question --title="remplacer" --text="$1 est plus ancien que la destination.
voulez-vous le remplacer?"
if [ $? = "0" ]; then
cp -f $chemin $destination
fi
fi
exit 0;
Dernière modification par greg2007 (Le 30/07/2008, à 15:42)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#20 Le 30/07/2008, à 12:52
- omnimax
Re : besoin d'aide pour un nautilus script
quel est la signication d'ELIF : ou bien?
et Else : ou encore?
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#21 Le 30/07/2008, à 12:53
- omnimax
Re : besoin d'aide pour un nautilus script
dans la doc il me semblait qu'il y avait une commande pour situer dans quelle ligne se situait l'erreur dans le script mais je ne retrouve plus cet article et idem sur google :(:(:(
Dernière modification par greg2007 (Le 30/07/2008, à 12:53)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#22 Le 30/07/2008, à 21:10
- WW
Re : besoin d'aide pour un nautilus script
Salut,
Je ne fesais que passer, je testerai ton code demain.
Et if -> si
then -> alors
else -> sinon
elif ou else if -> sinon si (tu remets une condition)
Ya pas forcément que deux choix donc ca peut faire :
if CONDITION1 then # Premier cas intéressant
TRAITEMENT1
elif CONDITION2 then # Second cas intéressant
TRAITEMENT2
...
elif CONDITIONX then # X-ième cas intéressant
TRAITEMENTX
else #Pour tous les autres cas
TRAITEMENT3
fi
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#23 Le 01/08/2008, à 18:42
- WW
Re : besoin d'aide pour un nautilus script
Bon je comprends pas mon interpréteur shell, il arrive à interpréter ce script différement lors de deux exécutions successives. Mais il m'a fait beaucoup de choses étrange aujourd'hui. Je vérifirais plus tard :
#!/bin/sh
remplacer() { # Ceci est une déclaration de fonction. En bash (sh) les fonctions sont justes des blocs de code appelé plus loin
zenity --question --title="Remplacer" --text="$1 est plus récent que celui de la destination. Voulez-vous le remplacer?" # Je centralise ce traitement car il apparaissait deux fois, il faut abuser des fonctions.
if [ $? = "0" ]
then cp -f $1 $2 # Pour récupérer les arguments de ta fonction tu utilise le tableau $# qui va de $1 à $9
fi
}
destination=$(zenity --file-selection --directory --title="choisir le dossier pour copier")
if [ "$destination" = "" ]; then # L'utilisateur à cliquer sur annuler
echo "Annulation" # On affiche dans le terminal la cause de la fin du processus ici Annulation de l'utilisateur
exit 0;
else
chemin=$PWD/$1
copieFichier="$destination/"$1
if [ ! -e $copieFichier ]
then cp $chemin $destination
elif [ $chemin -ot $copieFichier ]
then remplacer $chemin $destination # On appelle la fonction
else
remplacer $chemin $destination # Idem
fi
fi
exit 0;
Dernière modification par WW (Le 02/08/2008, à 16:10)
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne
#24 Le 01/08/2008, à 19:21
- omnimax
Re : besoin d'aide pour un nautilus script
(ok d'ac parce que là franco je comprends pas trop)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#25 Le 02/08/2008, à 16:12
- WW
Re : besoin d'aide pour un nautilus script
Ajout de commentaire dans mon post précédent.
Quand on sait c'est facile, mais qui n'a jamais été débutant.
Hors ligne