[retour chariot] passer à une commande

Applications, problèmes de configuration réseau
AchilleFraisse
Elfe
Messages : 579
Inscription : dim. 27 avr. 2014, 09:32

[retour chariot] passer à une commande

Message par AchilleFraisse » lun. 16 déc. 2019, 13:16

bonjour
j'ai un programme qui attends en parametre un parametre (l'executable se nomme prog).
j'ai marqué dans un script :

Code : Tout sélectionner

./prog "Hello World\r\n"
mais mon programme m'affiche les caractères '\r' et '\n' au lieu d'afficher une nouvelle ligne.
quelqu'un sait comment je peux faire pour qui mon script interprete les retours chariot ?

Avatar de l’utilisateur
papajoke
Elfe
Messages : 589
Inscription : sam. 30 août 2014, 19:54
Contact :

Re: [retour chariot] passer à une commande

Message par papajoke » lun. 16 déc. 2019, 19:40

bonjour

Le plus simple est de faire dans ton programme (nous somme en open source) un remplace chaine \n par le caractère #13

ps: \r :non:
Dernière modification par papajoke le dim. 22 déc. 2019, 10:33, modifié 2 fois.
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau

benjarobin
Maître du Kyudo
Messages : 15923
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [retour chariot] passer à une commande

Message par benjarobin » lun. 16 déc. 2019, 19:58

Bonjour,
C'est possible. J'ai fait quelques tests... Sous zsh comme sous bash:

Code : Tout sélectionner

hexdump -C <<< "Hello\r\n"
00000000  48 65 6c 6c 6f 5c 72 5c  6e 0a                    |Hello\r\n.|

Code : Tout sélectionner

hexdump -C <<< 'Hello\r\n'
00000000  48 65 6c 6c 6f 5c 72 5c  6e 0a                    |Hello\r\n.|

Code : Tout sélectionner

hexdump -C <<< $'Hello\r\n'
00000000  48 65 6c 6c 6f 0d 0a 0a                           |Hello...|
Attention la commande echo (en built-in) sous zsh ne se comporte pas de la même façon que /usr/bin/echo
La commande suivante : echo "Hello\r\n" sous zsh affiche Hello avec un saut de ligne, tandis qu'avec bash cela affiche Hello\r\n
La commande suivante : echo $'Hello\r\n' sous zsh comme sous bash affiche Hello avec un saut de ligne

En résumé, pour que bash/zsh évalue les séquences d’échappement, il est nécessaire d’utiliser la syntaxe $' '

Il existe une autre solution pour évaluer les caractères d'échappement : /usr/bin/echo -e "Hello\r\n"
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

sukolyn
archer
Messages : 106
Inscription : mar. 11 juil. 2017, 09:56

Re: [retour chariot] passer à une commande

Message par sukolyn » lun. 16 déc. 2019, 20:49

salut,

àmha, c'est au prog d'ajouter ce qu'il faut, pas à l'utilisateur d'indiquer le "format", qui fera que les informations seront traitées d'une manière ou d'une autre.
l'utilisateur, lui, ne doit avoir à entrer que Hello World.

benjarobin
Maître du Kyudo
Messages : 15923
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [retour chariot] passer à une commande

Message par benjarobin » lun. 16 déc. 2019, 21:27

sukolyn a écrit :
lun. 16 déc. 2019, 20:49
àmha, c'est au prog d'ajouter ce qu'il faut, pas à l'utilisateur d'indiquer le "format", qui fera que les informations seront traitées d'une manière ou d'une autre.
l'utilisateur, lui, ne doit avoir à entrer que Hello World.
Je ne suis clairement pas d'accord. Je ne sais pas ce que fais le programme, mais clairement le programme s'attend à avoir les données dans un certain format. Il ne peut pas magiquement détecter le format d'entrée (Json, XML, CSV, ....)
Et ce n'est pas forcément le but de sa question, qui est : comment passer des sauts de lignes via paramètre
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

sukolyn
archer
Messages : 106
Inscription : mar. 11 juil. 2017, 09:56

Re: [retour chariot] passer à une commande

Message par sukolyn » lun. 16 déc. 2019, 22:02

quand tu écris un programme, tu lui donnes les moyens d'identifier ce qu'il reçoit. no magic.
j'ai appris qu'il faut toujours séparer les données du format (hors séparateur de champs, de ligne, mais ce n'est pas de ça qu'il s'agit), or, ici, il est question de passer des données accompagnées d'indication de format, voire une validation.
ça ne me paraît pas correct, et je doute de la qualité d'un programme qui chargerait l'utilisateur de suppléer à ce qu'il (le programme) devrait faire. beware!

KISS pour le programmeur, et KISS pour l'utilisateur.

Répondre