Script bash qui marche à moitié

Script bash qui marche à moitié - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 22-01-2007 à 18:40:49    

Salut tout le monde,
 
Soyez indulgent avec un débutant (plein de volonté et qui a Google comme copain) !
 
Voilà, c'est mon premier script, il est beau mais voilà, il y a un truc qui ne va pas dans mon code. Le script fait ce que j'attends de lui en ligne de commande si je suis dans le répertoire courant du fichier que je veux renommer mais si je le lance via nautilus-script, la commande mv sensée renommer mon fichier ne fait rien.
 
J'ai l'impression que c'est un problème de chemin mais pourquoi ?
 
Voici mon code :
 

Code :
  1. #!/bin/bash
  2. # Récupérer le nom du fichier sélectionné et son extension
  3. name=`echo "$1" | cut -d"." -f1`
  4. extend=`echo "$1" | cut -d"." -f2`
  5. file0=`echo "$name.$extend" | sed 's/ /\?/g'`
  6. file1=`zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier "$1", s'il vous plaît" --entry-text="$file0"| sed 's/ /\-/g'`
  7. # jusque là, ça marche nickel
  8. # Déplacement et renommage du fichier dans son répertoire de destination.
  9. mv $file0 $file1.$extend
  10. exit


 
Je précise que ça marche en ligne de commande si je suis dans le répertoire courant.
 

Code :
  1. .gnome2/nautilus-script/monscript blablab/piaf.mp3

ça me détruit mon fichier piaf.p3
 
Par contre :

Code :
  1. .gnome2/nautilus-script/monscript piaf.mp3


fonctionne.

Reply

Marsh Posté le 22-01-2007 à 18:40:49   

Reply

Marsh Posté le 22-01-2007 à 19:29:26    

Il fautdrait que tu récupère le répertoir de ton fichier au lieu d'utiliser des chemins relatifs
et mets des "guillemets" autour de tes variables


Message édité par l0ky le 22-01-2007 à 19:32:19
Reply

Marsh Posté le 22-01-2007 à 19:45:37    

Et pour récupérer le chemin de mon fichier, tu n'aurais pas une idée par hasard?

Reply

Marsh Posté le 22-01-2007 à 23:39:53    

Ce n'était pas un problème de chemin, il me fallait supprimer à la troisième ligne le tube suivant :  
| sed 's/ /\?/g
 
je ne sais pas pourquoi mais ça marche !

Reply

Marsh Posté le 23-01-2007 à 00:14:32    

Cette ligne avait des "anti guillemets" (j'ai oublié leur nom réel).
Normalement, ils servent à exécuter la commande en priorité et à "servir" le résultat quand la portion doit etre exécutée.
Sauf que là, ça concernait TOUTE la ligne...


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 23-01-2007 à 14:26:48    

Voilà, mon script est quasi fini mais j'ai un gros problème ! Il marche de partout sauf lorsque je sélectionne un fichier sur mon Desktop !
 

Code :
  1. #!/bin/sh
  2. newfile=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
  3. # Récupérer le nom du fichier sélectionné et son extension
  4. name=`echo "$1" | cut -d"." -f1`
  5. extend=`echo "$1" | cut -d"." -f2`
  6. file0=`echo "$name.$extend"`
  7. myProduction=/home/moi/Documents/AUDIODATA
  8. file1="nouveau nom pour un essai"
  9. groupfile=`zenity --entry --title="Groupe du fichier" --text="Veuillez entrer le numéro d'appartenance du fichier $file1, s'il vous plaît !"`
  10. # Déplacement et nommage du fichier dans son répertoire de destination.
  11. if [ ! -d $myProduction/$groupfile ] ; then
  12. mkdir $myProduction/$groupfile
  13. fi
  14. # Déplacement et nommage du fichier dans son répertoire de destination.
  15. cp "$1" "$myProduction/$groupfile/CQ$groupfile-$file1.$extend"


 
Qu'est-ce qui déconne d'après vous ?

Reply

Marsh Posté le 23-01-2007 à 14:28:50    

Le chemin absolu de ton desktop c'est quoi ?


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 23-01-2007 à 14:32:27    

/home/bastien/Desktop/

Reply

Marsh Posté le 23-01-2007 à 14:42:09    

[mode kon on]
achete lui une jambe :whistle:  
[/mode kon off]

Reply

Marsh Posté le 23-01-2007 à 14:43:39    

t gentil toi !

Reply

Marsh Posté le 23-01-2007 à 14:43:39   

Reply

Marsh Posté le 23-01-2007 à 14:51:50    

Alors quelques remarques :
 
- file0=`echo "$name.$extend"`    c'est pas juste $1 ca ?
- pense bien à protéger tes variables avec "". En effet echo "toto titi tata" et echo toto titi tata c'est pas pareil
- tu peux aussi protéger des `toto` en "`toto`", si jamais `toto` renvoie plusieurs mots séparés par des espaces tu pourrais avoir des surprises
 
Mais sinon je ne vois rien qui se comporterait  différement avec /home/bastien/Desktop  :??:  


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 23-01-2007 à 14:58:28    

- file0=`echo "$name.$extend"`    c'est pas juste $1 ca ?
 
Bien sûr, mais j'ai besoin de l'extension du fichier à part. Je n'ai pas mis tout le script pour ne pas rendre difficile sa lecture.

Reply

Marsh Posté le 23-01-2007 à 15:01:32    

hdiamant a écrit :

- file0=`echo "$name.$extend"`    c'est pas juste $1 ca ?
 
Bien sûr, mais j'ai besoin de l'extension du fichier à part. Je n'ai pas mis tout le script pour ne pas rendre difficile sa lecture.


 
Balance tout au contraire  ;)


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 23-01-2007 à 15:02:04    

pour memaster62
 
Je n'ai malheureusement pas de bon conseil à te donner en matière de programmation de script, je le regrette sincèrement. Par contre, je peux te donner un conseil humain, ta remarque est blessante. Il ne me semble pas que l'on ait jamais aidé quelqu'un par simple désobligeance, ça se saurait, sinon ! Tu ne crois pas?

Reply

Marsh Posté le 23-01-2007 à 15:03:27    

hdiamant a écrit :

pour memaster62

 

Je n'ai malheureusement pas de bon conseil à te donner en matière de programmation de script, je le regrette sincèrement. Par contre, je peux te donner un conseil humain, ta remarque est blessante. Il ne me semble pas que l'on ait jamais aidé quelqu'un par simple désobligeance, ça se saurait, sinon ! Tu ne crois pas?


je pense qu'il plaisantait, marche à moitié = manque une jambe enfin un truc comme ça quoi :D faut pas le prendre pour toi

Message cité 1 fois
Message édité par Mjules le 23-01-2007 à 15:03:38

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 23-01-2007 à 15:05:28    

Code :
  1. #!/bin/bash
  2. newfile=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
  3. myProduction=/home/blabla/PRODUCTION
  4. # Récupérer le nom du fichier sélectionné et son extension
  5. name=`echo "$1" | cut -d"." -f1`
  6. extend=`echo "$1" | cut -d"." -f2`
  7. file0=`echo "$name.$extend"`
  8. file1=`zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier "$1", s'il vous plaît" --entry-text="$name"| sed 's/ /\-/g'`
  9. # Récupérer le numéro du groupe auquel se rattache le fichier
  10. declare -i groupfile
  11. groupfile=`zenity --entry --title="Groupe du fichier" --text="Veuillez entrer le numéro d'appartenance du fichier $file1, s'il vous plaît !"`
  12. # Récupération de la durée du fichier.
  13. if
  14.  [ "$extend" = "mp3" ] ; then
  15.  MM=`mp3info -x "$1" | grep Length | cut -d ":" -f2`
  16.  SS=`mp3info -x "$1" | grep Length | cut -d ":" -f3`
  17. elif
  18.  [ "$extend" = "ogg" ] ; then
  19.  MM=`ogginfo "$1" | grep Playback | cut -d " " -f3 | cut -d "m" -f1`
  20.  SS=`ogginfo "$1" | grep Playback | cut -d " " -f3 | cut -d ":" -f2 | cut -d "." -f1`
  21. else
  22.  zenity --info --title="Erreur" --text="Le fichier n'est pas conforme."
  23. fi
  24. zenity --info --title "Résultat" --text="Durée du fichier : $MM m et $SS s."
  25. # Création du répertoire de destination s'il n'existe pas
  26. if [ ! -d $myProduction/$groupfile ] ; then
  27. mkdir $myProduction/$groupfile
  28. fi
  29. # Copie et nommage du fichier dans son répertoire de destination.
  30. cp "$1" "$myProduction/$groupfile/CQ$groupfile-$file1.$extend"


 
Voilà, si c'est plus clair comme ça.

Reply

Marsh Posté le 23-01-2007 à 15:11:57    

J'ai pas mon pc pour vérifier ... est-ce que tu as le même contenu dela variable NAUTILUS_SCRIPT_SELECTED_FILE_PATHS en sélectionnant des fichiers depuis le Desktop et depuis un nautilus qui affiche le contenu de Desktop ?

Reply

Marsh Posté le 23-01-2007 à 15:18:15    

De toute façon newfile et file0 ne servent jamais ici :o
Pourquoi utiliser sed pour remplacer les espaces par des - ? Si tu protèges tout comme il faut on peut tout à fait manipuler des noms de fichiers avec espaces (certes c'est chiant parfois)
 
Et dans la définition de file1, pas besoin de sortir le $1 des "", "blablabla $1 blablabla" c'est protégé donc c'est bien


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 23-01-2007 à 15:18:50    

Mjules a écrit :

je pense qu'il plaisantait, marche à moitié = manque une jambe enfin un truc comme ça quoi :D faut pas le prendre pour toi


oui ce sujet manquait un p'ti peu de bon humeur, c'était une boutade. :wahoo:  
je suis désolé si tu l'as mal pris :sweat:

Reply

Marsh Posté le 23-01-2007 à 15:43:14    

Xavier_OM a écrit :

De toute façon newfile et file0 ne servent jamais ici :o


Oui, c'est vrai. Au début, je pensais que newfile serait mon chemin mais pas du tout. Je pensais aussi invoquer file0 mais c'est la même chose que $1 donc, ce n'est pas nécessaire en effet.

Xavier_OM a écrit :

Pourquoi utiliser sed pour remplacer les espaces par des - ? Si tu protèges tout comme il faut on peut tout à fait manipuler des noms de fichiers avec espaces (certes c'est chiant parfois)


J'ai besoin qu'il n'y ait pas d'espace dans les noms de fichier. Il ne s'agit pas de musique mais de bouts d'enregistrements techniques donc la présentation n'est pas trop mon souci, pourvu que ce soit conforme.
 

Xavier_OM a écrit :

Et dans la définition de file1, pas besoin de sortir le $1 des "", "blablabla $1 blablabla" c'est protégé donc c'est bien


Tu as raison, je les supprime.
 
Mais le script ne marche toujours pas à partir du Desktop.
 
Pffff !!! J'ai commencé ça samedi et vous voulez qu'il y ait de l'humour? Aaargh !
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed