Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1097 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script bash qui marche à moitié

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script bash qui marche à moitié

n°880163
hdiamant
Posté le 22-01-2007 à 18:40:49  profilanswer
 

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.

mood
Publicité
Posté le 22-01-2007 à 18:40:49  profilanswer
 

n°880173
l0ky
Posté le 22-01-2007 à 19:29:26  profilanswer
 

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
n°880179
hdiamant
Posté le 22-01-2007 à 19:45:37  profilanswer
 

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

n°880224
hdiamant
Posté le 22-01-2007 à 23:39:53  profilanswer
 

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 !

n°880227
Fork Bomb
Obsédé textuel
Posté le 23-01-2007 à 00:14:32  profilanswer
 

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 !"
n°880489
hdiamant
Posté le 23-01-2007 à 14:26:48  profilanswer
 

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 ?

n°880491
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 23-01-2007 à 14:28:50  profilanswer
 

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.
n°880493
hdiamant
Posté le 23-01-2007 à 14:32:27  profilanswer
 

/home/bastien/Desktop/

n°880497
memaster
ki a volé mon 62?
Posté le 23-01-2007 à 14:42:09  profilanswer
 

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

n°880498
hdiamant
Posté le 23-01-2007 à 14:43:39  profilanswer
 

t gentil toi !

mood
Publicité
Posté le 23-01-2007 à 14:43:39  profilanswer
 

n°880500
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 23-01-2007 à 14:51:50  profilanswer
 

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.
n°880502
hdiamant
Posté le 23-01-2007 à 14:58:28  profilanswer
 

- 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.

n°880503
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 23-01-2007 à 15:01:32  profilanswer
 

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.
n°880504
hdiamant
Posté le 23-01-2007 à 15:02:04  profilanswer
 

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?

n°880505
Mjules
Modérateur
Parle dans le vide
Posté le 23-01-2007 à 15:03:27  profilanswer
 

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.
n°880507
hdiamant
Posté le 23-01-2007 à 15:05:28  profilanswer
 

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.

n°880509
philx
Posté le 23-01-2007 à 15:11:57  profilanswer
 

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 ?

n°880510
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 23-01-2007 à 15:18:15  profilanswer
 

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.
n°880512
memaster
ki a volé mon 62?
Posté le 23-01-2007 à 15:18:50  profilanswer
 

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:

n°880519
hdiamant
Posté le 23-01-2007 à 15:43:14  profilanswer
 

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 !
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script bash qui marche à moitié

 

Sujets relatifs
sauvegarde sur DD usb, besoin avis sur mon scriptscript shell : utiliser la durée des fichiers audio
script a lancer au demarage d'une session Xscript unix - comparer plusieur repertoires
Changer de répertoire dans un scriptBASH : ajouter des lignes en début de fichier
SH/BASH Petite question avec des -paramPour les pro du script bash - Supprimer les fichiers < 1k
Plus de sujets relatifs à : Script bash qui marche à moitié


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR