Forum Programmation.shell script + konqueror

Posté par .
Tags : aucun
1
10
jan.
2010
Bonjour à tous,

Comme certain le savent, j'ai développer ici grace à certain un script de traitement d'image.
Le truc c'est que je voudrais le rendre accessible depuis konqueror par un click droit.
j'ai donc chercher et fini par trouver les servicemenu sous kde3.5 pour konqueror dans
/usr/share/apps/konqueror/servicemenus/

j'ai crée un service menu du type:

[Desktop Entry]
ServiceTypes=inode/directory
Actions=reduc_imagecata;

[Desktop Action reduc_imagecata]
Name=reduc
Name[fr]=reduc
Icon=ark
Exec=reduc.sh

il apparait bien, mais ne s'execute pas,
J'ai donc chercher, et j'ai découvert en lançant konqueror depuis la console qu'il executais le script là d'où je lancais la console.

En clair,
[sacha@localhost ~]$konqueror
avec ceci quelque sois le dossier ou je me situe sous konqueror il applique le script dans le dossier ~

si
[sacha@localhost ~/Images]$konqueror
avec ceci quelque sois le dossier où je me situe sous konqueror il applique le script dans le dossier ~/Images

En clair le soucis ne viens pas du servicemenu je pense mais du script, il faudrais que je récupère le dossier courant de konqueror, et que qu'au début du script il ajoute un cd 'dossier_courant_konqueror'

bon j'ai bien trouvé une solution ctrl+E pour lancer un commande
mais j'aurais bien aimé avoir le click droit et comprendre comment résoudre ce problème.

Merci à vous
  • # passage paramètre ?

    Posté par . Évalué à 1.

    en mettant :
    Exec=reduc.sh %d

    et (dans ton script) en récupérant $1, ça devrait marcher.

    Sinon quand je veux me rajouter un menu, je vais sur http://www.kde-apps.org/index.php?xcontentmode=287 et j'en prend un et je regarde comment il est fait.
    • [^] # Re: passage paramètre ?

      Posté par . Évalué à 1.

      nikel


      juste %f à la place de %d, qui parait mon adapter à mon.

      Mais petit dernier soucis
      si je met
      Exec=reduc.sh %f

      puis dans reduc.sh
      rep=$1
      echo rep
      cd $rep


      ca me donne dans le ou ~/test dossier/
      ~/test dossier
      /bin/reduc.sh: line 10: /home/sacha/test\: Aucun fichier ou répertoire de ce type

      il me coupe le nom du dossier à l'espace

      j'ai aussi essayer:
      echo $1
      rep_courant="${1// /\ }"
      echo 'rep_courant'
      echo $rep_courant
      cd $($rep_courant)
      cd "$rep_courant"


      mais idem
      • [^] # Re: passage paramètre ?

        Posté par . Évalué à 2.

        et avec :

        Exec=reduc.sh "%f"

        ça marche ?
        Parce que a vu de nez comme ça je dirais que $1 s'arrêt à l'espace.
        • [^] # Re: passage paramètre ?

          Posté par . Évalué à 1.

          Bah le saisie de l'adresse ne s'arrete pas à l'espace mais c'est le cd qui s'arrete à l'espace:
          mon code:
          Exec=reduc.sh "%f"
          et
          echo 'origin'
          echo $1
          rep_courant="${1// /\ }"
          echo 'rep_courant'
          echo $rep_courant
          echo 'cd1'
          cd $rep_courant
          echo 'cd2'
          cd '$rep_courant'
          echo 'cd3'
          cd "$rep_courant"
          echo 'cd4'
          cd $($rep_courant)



          Resultat:
          origin
          /home/sacha/test image
          rep_courant
          /home/sacha/test\ image
          cd1
          /bin/reduc.sh: line 11: cd: /home/sacha/test\: Aucun fichier ou répertoire de ce type
          cd2
          /bin/reduc.sh: line 13: cd: $rep_courant: Aucun fichier ou répertoire de ce type
          cd3
          /bin/reduc.sh: line 15: cd: /home/sacha/test\ image: Aucun fichier ou répertoire de ce type
          cd4
          /bin/reduc.sh: line 17: /home/sacha/test\: Aucun fichier ou répertoire de ce type
          Le dossier reduc existe déjà
          • [^] # Re: passage paramètre ?

            Posté par . Évalué à 1.

            Il ne faut pas faire ça :
            rep_courant="${1// /\ }"
            un
            cd "$1"
            suffirait et marcherait je pense, en tout cas chez moi c'est le cas.
            • [^] # Merci

              Posté par . Évalué à 1.

              Génial.
              C'est celà

              #!/bin/bash
              # Nom du nouveau répertoire
              NV_DOSSIER=reduc

              echo 'dossier'
              echo $1
              cd "$1"

              # Création du nouveau dossier s'il n'existe pas
              if [ -d $NV_DOSSIER ] ;
              then
              echo "Le dossier reduc existe déjà"
              else
              mkdir $NV_DOSSIER
              fi
              rep=$(pwd)
              jourmois=$(date +'%d%m')
              rep="${rep##*/}"
              rep="${rep// /-}"

              # Pour toutes les photos (JPG) du répertoire
              for image in *[jJ][pP][gG] ;
              do
              width=$(identify -format '%w' "$image")
              height=$(identify -format '%h' "$image")
              ratio=$(echo "scale=2; $height / $width" |bc)
              echo $ratio

              if [ $ratio '<' .70 ]
              then
              image="${image##*/}"
              nv_nom=$(printf '%s_%s_%s\n' ${rep} ${jourmois} $image) #on dit merci à Fred

              # Réduit l'image en 601x400
              convert "$image" -resize 601x400 "$NV_DOSSIER/$nv_nom"
              # fusione l'image avec un calque contenant les coins
              composite -gravity center /home/sacha/Images/cadre.png "$NV_DOSSIER/$nv_nom" "$NV_DOSSIER/$nv_nom"
              # fin de la boucle FOR
              else
              nv_nom=$(printf 'thai_prod_%s_%s.jpg\n' ${rep} ${jourmois}) #on dit merci à Fred

              # Réduit l'image en 601x400
              convert "$image" -resize 200x150 "$NV_DOSSIER/$nv_nom"
              # fusione l'image avec un calque contenant les coins
              composite -gravity center /home/sacha/Images/cadremini.png "$NV_DOSSIER/$nv_nom" "$NV_DOSSIER/$nv_nom"
              fi
              done
              echo '-Fini !!!'
              exit




              Mille merci

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.