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 GNU Discussion :

Tracer une ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut Tracer une ligne
    Salut

    Je cherche à tracer une ligne (dans mon cas pour séparer 2 lignes de commandes). Je n'ai rien trouvé à ce sujet sur le net

    Ecrire des "_" ou "-" ne me convient pas parceque je ne sais pas combien en afficher, vu que je veux que ma ligne prenne toute la largeur disponible.

    Est-ce que quelqu'un a une idée ?

    Merci !

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Salut, Sephi
    Citation Envoyé par Sephiroth Lune Voir le message
    Je cherche à tracer une ligne (dans mon cas pour séparer 2 lignes de commandes).
    Dans une fenêtre de terminal, donc ?

    Citation Envoyé par Sephiroth Lune Voir le message
    Ecrire des "_" ou "-" ne me convient pas parce que je ne sais pas combien en afficher, vu que je veux que ma ligne prenne toute la largeur disponible.

    Est-ce que quelqu'un a une idée ?
    Faudra bien que tu en passes par là, car
    1. écrire sur le canvas limité à la fenêtre du terminal depuis une appli X (genre écrite en Lazarus) même pas j'y pense, d'autant plus que,
    2. dans une fenêtre de terminal, echo $COLUMNS devrait faire ton bonheur pour le nombre de "-" ou "_" à insérer


    [ EDIT ] Ajout d'une précision :
    pour que "echo $COLUMNS" (ou "largeur=$COLUMNS") fonctionne dans un script, il faut un Bash récent (> 4.2.10 je crois) et rajouter "-i" à la fin du shabang :
    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
    #!/bin/bash -i
     
    # si $COLUMNS "#!/bin/bash -i" sinon vide !
    largeur=$COLUMNS
     
    ### sinon, utiliser 
    #largeur=$(tput cols)
     
    echo "$largeur"
    cptr=0
    while [ $cptr -lt "$largeur" ]
    do
        echo -n "_" # ou "-"
        cptr=$(($cptr+1))
    done
    echo
     
    echo "autre commande"
    [ /EDIT ]
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Si COLUMNS n'est pas renseigné, deux autres solutions :

    bash & ksh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ((i=0;i<$(tput cols);i++)); do printf "_"; done echo
    plus portable (dash):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i=$(tput cols); while [ $i -gt 0 ] ; do printf "_"; i=$((i-1)); done; echo
    ɹǝsn *sıɹɐlos*

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Et juste pour le fun :

    Images attachées Images attachées  
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,
    En bash en trichant un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ printf "\e[4m%$(tput cols)s\e[m"
    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Yep !
    Citation Envoyé par disedorgue Voir le message
    Bonjour,
    En bash en trichant un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ printf "\e[4m%$(tput cols)s\e[m"
    EX-CEL-LENT !

    Mais un truc cool, pour les neuneus comme moi, ça serait de décortiquer ta commande, parce que je n'ai pas compris/pas trouvé d'où sortait le caractère "_"...
    Et si on en veut un autre, genre "-" ou "=" ?

    Parce que man printf sur ce coup-là, c'est moyen, très moyen
    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    C'est pour ça que je dis en trichant:

    sous bash:
    \e[4m c'est le control ESC[4m qui dit au terminal de passé en mode souligné.
    \e[m pour revenir en normal.

    le printf est juste un printf classique (exemple):

    "%123s" qui va caler 123 espaces avant d'afficher la chaine (vide ici), et comme le soulignement est activé, on a donc 123 espaces soulignés.

    D'ailleurs, si tu copie/colle la ligne soulignée dans un éditeur, tu ne verras que des espaces (en gros c'est une ligne virtuelle).

    Tu peux aussi tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "\e[7m%$(tput cols)s\e[m"
    Ici, au lieu du soulignement, j'active le mode inversé.
    Cordialement.

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    OK merci !
    Citation Envoyé par disedorgue Voir le message
    \e[4m c'est le control ESC[4m qui dit au terminal de passé en mode souligné.
    \e[m pour revenir en normal.
    J'avais bien repéré l'ESC mais je n'arrivais pas à aller plus loin, je suis un gros boulet, c'est les commandes VT52/VT100 !

    Merci de m'avoir rappelé cette époque lointaine...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Tant qu'on y est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "$(tput smul)%$(tput cols)s$(tput rmul)\n"
    ɹǝsn *sıɹɐlos*

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Chapeau bas.

    Il n' y a que des espaces? Ben c'est encore mieux! Car copier/coller des tirets, des 'égal's ou des degrés, a encore moins de sens.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Citation Envoyé par disedorgue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "\e[4m%$(tput cols)s\e[m"
    Citation Envoyé par jlliagre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "$(tput smul)%$(tput cols)s$(tput rmul)\n"
    n'affichent rien de visible dans xterm, ou dans une console.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf -- '-%.0s' $(seq 1 ${COLUMNS:-$(tput cols)})
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Yep !
    Citation Envoyé par Flodelarab Voir le message
    (...) Car copier/coller des tirets, des 'égal's ou des degrés, a encore moins de sens.
    Pas compris ce que tu veux dire, là...

    - - -

    Citation Envoyé par N_BaH Voir le message
    n'affichent rien de visible dans xterm, ou dans une console.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf -- '-%.0s' $(seq 1 ${COLUMNS:-$(tput cols)})
    Pas compris non plus, là... Les 3 commandes que tu donnes dans un xterm chez moi :
    Nom : xterm.png
Affichages : 312
Taille : 4,9 Ko
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    ah, oui ! en forçant la couleur dans xterm (\e[31m par exemple), en effet, alors, cela devient visible.
    <edit>une lacune dans ma configuration.</edit>

    mais je ne vois toujours rien dans une console.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    n'affichent rien de visible dans xterm, ou dans une console.
    Dans une console (linux), c'est normal car elle n'implémente pas le soulignement.

    Voici deux façons de contourner le problème (mais un peu épaisse la ligne ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf "$(tput rev)%$(tput cols)s$(tput sgr0)\n"
    printf "\033[44m%$(tput cols)s$(tput sgr0)\n"
    Par contre, dans un xterm, je ne vois pas pourquoi ça ne marche pas chez toi.

    Ici, pas de souci :

    Nom : Capture-1.png
Affichages : 322
Taille : 5,9 Ko
    ɹǝsn *sıɹɐlos*

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf -- '-%.0s' $(seq 1 ${COLUMNS:-$(tput cols)})
    Sympa, j'en avais une autre du même type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf -v x "%$(tput cols)s" && echo ${x// /_}
    Cordialement.

Discussions similaires

  1. [FLASH MX2004] Tracer une ligne en temps réel
    Par tomtom- dans le forum Flash
    Réponses: 1
    Dernier message: 16/02/2006, 09h52
  2. Tracer une ligne sur une image
    Par Guillaume602 dans le forum Windows
    Réponses: 5
    Dernier message: 05/01/2006, 20h33
  3. [VB.NET] Tracer une ligne (OnPaint)
    Par Emcy dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/03/2005, 13h09
  4. [FP]Tracer Une ligne avec Dev-pascal
    Par yffick dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/12/2003, 16h33
  5. Tracer une ligne droite sans les interruptions
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/11/2002, 01h22

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