IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Rassemblement de 2 commandes similaires


Sujet :

Shell et commandes POSIX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut Rassemblement de 2 commandes similaires
    Bonjour,
    J'ai un menu contextuel dans xfce/thunar qui me permet d'éditer un fichier texte avec vi dans une fenêtre xterm.
    Je m'en sert principalement pour modifier les fichiers systèmes.
    Pour ceux qui voudraient tester et me proposer une solution ...
    J'ai ajouté dans ~/.config/Thunar/uca.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <action>
    	<icon>gvim</icon>
    	<name>Modifier avec Vi</name>
    	<unique-id>Menu_Perso-1</unique-id>
    	<command>~/bin/Open_with_vi %f</command>
    	<description>vi editor</description>
    	<patterns>*</patterns>
    	<other-files/>
    	<text-files/>
    </action>
    J"ai ajouté dans ~/.config/Thunar/accels.scm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ; (gtk_accel_path "<Actions>/ThunarActions/uca-action-Menu_Perso-1" "")
    Mon fichier exécutable ~/bin/Open_with_vi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/bin/sh
    file="${1##*/}"
    cmd="vi"
    test $( ls -l "$1" | awk '{ print $3 }' ) != "$USER" && 
    {
      comp="'"
      cmd="echo \"$file\" is not your file so you must set to root: ; su -l root -c '$cmd -c \"cd ${1%/*}\"" 
      xterm -title 'Vi Editor of '"$file" \
            -fa 'Monospace Regular' \
            -fs 15 \
            -e "$cmd '\''$1'\''$comp || \
               {
                 tput clear
                 echo Not authorized to edit \"$file\"
                 echo Sorry
                 sleep 3
               }"
    } ||
    xterm -title 'Vi Editor of '"$file" \
          -fa 'Monospace Regular' \
          -fs 15 \
          -e "$cmd '$1'"
    Ici; j'ai 2 commandes xterm.
    Je cherche a en avoir qu'une seule qui s'applique a tous les cas.
    Mais là; je séche.
    Actuellement, ça fonctionne sur debian, OpenBSD et NetBSD.
    Je ne cherche pas une solution bash.
    Si une petite suggestion vous vient a l'esprit, n'hesitez pas.
    N_BaH va faire des bonds avec l'utilisation de ls mais s'il y a une meilleure solution ...

    Petite explcation du script:

    Si le fichier m'appartient, pas de probléme, vi est lancé.
    Si c'est un fichier système, on demande le mot de passe root avant de lancer vi.
    La commande change le répertoire courrant vers /root.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su -l root -c '$cmd -c \"cd ${1%/*}\"
    permet de positionner vi dans le répertoire du fichier.
    A mon avis trés utile pour faire une copie de sauvegarde.
    Il reste encore a traiter le cas du fichier qui n'appartient ni a root, ni a moi mais on verra plus tard.
    Cordialement.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 886
    Points : 6 624
    Points
    6 624
    Par défaut
    N_BaH va faire des bonds avec l'utilisation de ls mais s'il y a une meilleure solution ...
    Pour être plus précis, N_BaH est l'un des rares qui a encore la volonté de réagir quand il voit ça. C'est pas la mer à boire de se pencher sur le man de find afin de contrôler la sortie.

    Sinon désolé mais je n'utilise ni xfce, ni thunar... Pour une prochaine peut-être.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 259
    Points : 13 511
    Points
    13 511
    Par défaut
    Bonjour

    Les 2 alternatives à "ls" sont "find" et "stat". Ici, c'est stat.


    En ce qui concerne l'utilisation d'une seule commande xterm, pourquoi ne pas mettre en facteur commun ?
    Tu as des alternatives, mais elles finissent toutes par lancer xterm.
    Donc, en affectant les variables dans les "faux-if", il ne reste plus qu'à finir par un seul xterm général.
    Était-ce ta question ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour et merci du retour.

    Je m'escrimais a vouloir placer le nom du fichier dans l'option -e de xterm.
    En créant la commande compléte dans la variable cmd, ça va tout de suite mieux.

    @Flodelarab : C'est vrai que stat serait parfais mais les options changent.
    Le -c sur debian devient -t sur OpenBSD.

    @CosmoKnacki : En grattant un peu, j'ai bien trouvé une alternative avec find surtout que je n'ai pas besoin de récupérer le propriétaire du fichier.

    En effet, vi est sympa, même sous root, il ne change ni le propiétaire ni le group.
    Il n'y a que la copie de sauvegarde avec :w 'Nom de la sauvegarde' qui appartient a root.

    Voici le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/sh
    file="${1##*/}"
    cmd="vi"
    rep="${1%/*}"
    if test "$(find "$rep" -maxdepth 1 -name "$file" ! -user "$USER")" ; then
      cmd="echo \"$file\" is not your file so you must set to root: ; \
        su -l root -c '$cmd -c \"cd $rep\" '\''$1'\''' || \
        {
          tput clear
          echo Not authorized to edit \"$file\"
          echo Sorry
          sleep 3
        }"
    else
      cmd="$cmd '$1'"
    fi
    xterm -title 'Vi Editor of '"$file" \
          -fa 'Monospace Regular' \
          -fs 15 \
          -e "$cmd"
    Cordialement.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 580
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 580
    Points : 19 448
    Points
    19 448
    Par défaut
    Bonjour,

    ne suffirait-il pas de tester que le fichier est "inscriptible" (writable) par l'utilisateur en cours ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test -w "$chemin/$fichier"
    ls ...


  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Effectivement, nettement plus simple
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test -w "$chemin/$fichier"
    Il me semblait bien aussi en parlant de ls

    J'ai aussi modifié le cd (dans le shell plutôt que dans vi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su -l root -c 'cd $rep ; $cmd ...
    a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su -l root -c '$cmd -c \"cd $rep\" ...
    Merci.
    Cordialement.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 580
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 580
    Points : 19 448
    Points
    19 448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    K I S S !
    e t i t
    e   m u
    p   p p
        l i
        e d

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. rassembler des commandes
    Par nurgle1 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 16/04/2010, 15h32
  2. Réponses: 1
    Dernier message: 30/11/2009, 11h09
  3. commande perl similaire dbf
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2009, 16h31
  4. Creer une commande similaire include en C++ en javascript ?
    Par Battosaiii dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/10/2006, 13h50
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo