Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 14-10-2017 11:00:15

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Caractères parasites entre deux crochets / RESOLU

Bonjour,
Il m'arrive fréquemment d'avoir des messages d'erreur (commande inconnue) sur des tests réalisés par  [[   ]] . Je me suis rendu compte que dans ces cas il y avait un caractère UTF8 "no-breakspace" (c2a0) qui s'insérait après les deux crochets avant le caractère espace. Ce caractère n'est pas visible dans l'éditeur ou la console.

Dans l'exemple ci-dessous, les deux lignes de test semblent identiques, mais la première génère une erreur, la seconde non.
Fichier source :

#!/bin/sh      
[[ 0 = 0 ]]  
[[ 0 = 0 ]]  


Exècution :

bash test3


test3: ligne 2: [[ 0 : commande introuvable


La différence est bien visible sur la conversion hexa du fichier source :

hexdump -C test3


00000000  23 21 2f 62 69 6e 2f 73  68 20 20 20 20 20 20 0a  |#!/bin/sh      .|
00000010  5b 5b c2 a0 30 20 3d 20  30 20 5d 5d 20 20 20 0a  |[[..0 = 0 ]]   .|
00000020  5b 5b 20 30 20 3d 20 30  20 5d 5d 20 20 20 0a     |[[ 0 = 0 ]]   .|



Le caractère parasite peut se produire aussi bien en tapant directement en tty qu'en émulateur. J'ai essayé différents éditeurs de texte (nano, geany,mousepad, .. ) pareil.
Je n'ai réussi à reproduire le process exact, mais le caractère apparait si la saisie est retouchée et peut-être supprimée "à l'aveugle" en éditant le texte et en supprimant / retapant....

Mes questions !
Est-ce que vous avez le même problème ?
Comment l'éviter?
SInon, comment supprimer ce caractère UTF8  . "no-breakspace" (c2a0)  dans un fichier.

Merci -:)

Dernière modification par papy-tux (20-10-2017 16:29:21)

Hors ligne

#2 14-10-2017 11:44:07

raleur
Membre
Inscription : 03-10-2014

Re : Caractères parasites entre deux crochets / RESOLU

J'ai assez souvent un problème similaire dans le terminal après le caractère "|" (pipe). Je pense que cet espace insécable est produit par la touche AltGr qui a été utilisée pour taper | ou [ ] et qui est encore appuyée (ou vue comme telle) lors de l'appui sur la barre d'espace.

Note : sauf erreur, [[ ]] est un "bashisme", une syntaxe spécifique à bash qui ne fait pas partie des spécifications de shell POSIX (c'est pourquoi je l'évite autant que possible dans les scripts). Donc la déclaration de l'interpréteur dans la première ligne du script devrait être #!/bin/bash et non #!/bin/sh. Depuis plusieurs versions de Debian, par défaut /bin/sh pointe vers l'interpréteur dash et non plus bash.

Dernière modification par raleur (14-10-2017 11:48:12)

Hors ligne

#3 14-10-2017 11:58:02

Croutons
Membre
Distrib. : Handylinux 2.5 vers Jessie et Debian Stretch
Noyau : Linux 3.16.0-4-686-pae, Linux 4.9.0-3-686-pae
(G)UI : xfce
Inscription : 16-12-2016

Re : Caractères parasites entre deux crochets / RESOLU

Bonjour
Tu peux taper ton texte sous writer libre office par exemple tu pourras afficher les caractères non imprimable en cliquant sur le symbole sur la barre du haut

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

En ligne

#4 14-10-2017 19:46:47

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Caractères parasites entre deux crochets / RESOLU

Bonsoir

papy-tux a écrit :

…comment supprimer ce caractère UTF8  . "no-breakspace" (c2a0)  dans un fichier.…



Pour remplacer dans leFichierAmodifier.txt

tous les caractères no-breakspace par un caractère space (0x20)

sed -i 's/\xc2\xa0/\x20/g' leFichierAmodifier.txt



Je n'ai pas rencontré ce problème de saisie parasite.

Dernière modification par MicP (15-10-2017 09:03:20)

Hors ligne

#5 14-10-2017 20:12:21

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Re : Caractères parasites entre deux crochets / RESOLU

Merci à tous smile

Effectivement c'est bien en tapant (trop vite et mal!) à la fois sur espace et altgr que le caractère en question est tapé (ce que j'ai vérifié avec showkey -a ):

showkey -a



Appuyer sur n'importe quelle touche. Ctrl-D mettra fin au programme

   194 0302 0xc2
  160 0240 0xa0



Et la commande sed fait bien le filtre:
Avant :

cat test |hexdump -C


00000000  23 21 2f 62 69 6e 2f 73  68 20 20 20 20 20 20 0a  |#!/bin/sh      .|
00000010  5b 5b c2 a0 30 20 3d 20  30 20 5d 5d 20 20 20 0a  |[[..0 = 0 ]]   .|


Après :

sed 's/\xc2\xa0/\x20/g' test |hexdump -C


00000000  23 21 2f 62 69 6e 2f 73  68 20 20 20 20 20 20 0a  |#!/bin/sh      .|
00000010  5b 5b 20 30 20 3d 20 30  20 5d 5d 20 20 20 0a 5b  |[[ 0 = 0 ]]   .[|



Et encore merci à tous pour vos réponses. Problème résolu smile

Hors ligne

#6 14-10-2017 20:15:47

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Re : Caractères parasites entre deux crochets / RESOLU

Croutons a écrit :

Bonjour
Tu peux taper ton texte sous writer libre office par exemple tu pourras afficher les caractères non imprimable en cliquant sur le symbole sur la barre du haut


Effectivement j'ai essayé, ça permet de voir très facilement le problème et d'intervenir. C'est un bon moyen d'investigation:)

Hors ligne

#7 14-10-2017 20:18:29

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Re : Caractères parasites entre deux crochets / RESOLU

raleur a écrit :

Depuis plusieurs versions de Debian, par défaut /bin/sh pointe vers l'interpréteur dash et non plus bash.


Bizarre.... sur Stretch, quand je fais

echo $SHELL

, c'est /bin/bash qui apparaît ...

/bin/bash

Hors ligne

#8 14-10-2017 22:44:07

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Caractères parasites entre deux crochets / RESOLU

Bonsoir

papy-tux a écrit :


Comment l'éviter?

Tu pourrais créer un script qui, pour ton compte utilisateur,
modifie le caractère assigné à cette combinaison de touches.

Je crois que tu utilises xfwm4, il devrait être possible de lancer ce script
au moment de la connexion à ton compte utilisateur
en créant un fichier .desktop dans ~/.config/autostart

=======
Voir : https://wiki.archlinux.fr/Xmodmap

Le keycode de la touche Espace est 65
et je peux visualiser les caractères générés par la touche espace
en fonction des  différentes combinaisons de touches et de la configuration de mon clavier
avec la ligne de commandes suivante :

xmodmap -pke | sed -n '/ 65 /p'

keycode  65 = space space space space space nobreakspace space U202F

Avec ma configuration clavier : Français (variante),
c'est la combinaison de touches Shift+AltGr+Espace qui permet de générer un caractère no-breakspace

=======
La ligne de commandes ci-dessous fait en sorte
que la combinaison de touches utilisant la touche Espace
qui permettait de générer un caractère no-breakspace
génère un caractère espace :

xmodmap -e "$(xmodmap -pke | sed -n '/ 65 /s/ nobreakspace / space /p')"

Après l'exécution de la ligne de commandes ci-dessus,
on peut voir les modifications apportées avec :

xmodmap -pke | sed -n '/ 65 /p'

keycode  65 = space space space space space space space U202F


=======
Et si besoin, pour remettre mon clavier dans sa configuration initiale,
il me suffit de faire :

xmodmap -e "keycode  65 = space space space space space nobreakspace space U202F"

Dernière modification par MicP (15-10-2017 10:31:55)

Hors ligne

#9 15-10-2017 11:50:22

raleur
Membre
Inscription : 03-10-2014

Re : Caractères parasites entre deux crochets / RESOLU

papy-tux a écrit :

raleur a écrit :

Depuis plusieurs versions de Debian, par défaut /bin/sh pointe vers l'interpréteur dash et non plus bash.


Bizarre.... sur Stretch, quand je fais

echo $SHELL

, c'est /bin/bash qui apparaît ...

/bin/bash


Ce n'est pas la même chose. La variable d'environnement $SHELL contient le shell de l'utilisateur courant. Le shell d'un utilisateur est défini dans le fichier /etc/passwd (pour les détails : man 5 passwd) :

grep $USER /etc/passwd


raleur:x:1000:1000:Raleur,,,:/home/raleur:/bin/bash


Comme il s'agit d'un shell interactif, on utilise généralement un interpréteur "riche" comme bash.

Moi, je te parle de /bin/sh qui est le shell par défaut du système, utilisé par tous les scripts qui contiennent "#!/bin/sh" et qui est un lien symbolique pointant vers dash :

file /bin/sh


/bin/sh: symbolic link to `dash'


dash est un interpréteur plus simple et rapide que bash mais qui n'est pas très pratique comme shell interactif et qui convient mieux à l'exécution non interactive de scripts.

Hors ligne

#10 17-10-2017 10:37:15

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Re : Caractères parasites entre deux crochets / RESOLU

raleur a écrit :

papy-tux a écrit :

raleur a écrit :

Depuis plusieurs versions de Debian, par défaut /bin/sh pointe vers l'interpréteur dash et non plus bash.


Bizarre.... sur Stretch, quand je fais

echo $SHELL

, c'est /bin/bash qui apparaît ...

/bin/bash


Ce n'est pas la même chose. La variable d'environnement $SHELL contient le shell de l'utilisateur courant. Le shell d'un utilisateur est défini dans le fichier /etc/passwd (pour les détails : man 5 passwd) :

grep $USER /etc/passwd


raleur:x:1000:1000:Raleur,,,:/home/raleur:/bin/bash


Comme il s'agit d'un shell interactif, on utilise généralement un interpréteur "riche" comme bash.

Moi, je te parle de /bin/sh qui est le shell par défaut du système, utilisé par tous les scripts qui contiennent "#!/bin/sh" et qui est un lien symbolique pointant vers dash :

file /bin/sh


/bin/sh: symbolic link to `dash'


dash est un interpréteur plus simple et rapide que bash mais qui n'est pas très pratique comme shell interactif et qui convient mieux à l'exécution non interactive de scripts.



Ok c'est clair. Merci

Et tout à fait d'accord, les doubles crochets sont spécifiques à bash et doit-être utilisée avec l'entête de script !# /bin/bash et non !#/bin/sh comme j'avais mis dans l'exemple...

Hors ligne

#11 17-10-2017 10:56:39

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Re : Caractères parasites entre deux crochets / RESOLU

MicP a écrit :

Tu pourrais créer un script qui, pour ton compte utilisateur,
modifie le caractère assigné à cette combinaison de touches.

Je crois que tu utilises xfwm4, il devrait être possible de lancer ce script
au moment de la connexion à ton compte utilisateur
en créant un fichier .desktop dans ~/.config/autostart



J'ai testé la commande de remplacement de caractère... Impeccable!!!!

Par contre, je n'ai pas réussi à l'automatiser avec un fichier desktop.  Celui que j'ai créé (via l'interface graphique n'a pas d'effet ...). Il contient : 

[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=NoBreakSpace
Comment=Suppression nobreakspace quand apppui sur espace plus altgr
Exec=xmodmap -e "$(xmodmap -pke | sed -n '/ 65 /s/ nobreakspace / space /p')"
OnlyShowIn=XFCE;
StartupNotify=false
Terminal=false
Hidden=false



Est-ce qu'il y a quelque chose à faire de plus ou autre solution ?

Désolé, le sujet dérive mais je n'ai pas d'expérience en fichier desktop....

Hors ligne

#12 17-10-2017 18:33:30

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Caractères parasites entre deux crochets / RESOLU

Bonsoir

Je viens tout juste de tester une méthode bien sympa :

Il suffit de créer un fichier ~/.Xmodmap (donc, dans le répertoire personnel de l'utilisateur)
dont le contenu sera :

keycode  65 = space space space space space space space U202F

Et ce fichier sera automatiquement pris en compte par la commande xmodmap au moment de la connexion au compte utilisateur.

=======
Si besoin, on peut aussi lancer une commande xmodmap qui prendra en compte le fichier ~/.Xomdmap (ou n'importe quel autre nom de fichier)
en utilisant un lanceur de l'interface graphique :
1508262850.pngDans le champ Commande : du lanceur, %U est équivalent à $HOME/ ou ~/

Dernière modification par MicP (17-10-2017 19:57:06)

Hors ligne

#13 20-10-2017 16:28:40

papy-tux
Membre
Distrib. : Debian Jessie
Noyau : Linux 4.9.0-0.bpo.1-amd64
(G)UI : xfwm4
Inscription : 22-05-2014

Re : Caractères parasites entre deux crochets / RESOLU

MicP a écrit :

Bonsoir

Je viens tout juste de tester une méthode bien sympa :

Il suffit de créer un fichier ~/.Xmodmap (donc, dans le répertoire personnel de l'utilisateur)
dont le contenu sera :

keycode  65 = space space space space space space space U202F


Et ce fichier sera automatiquement pris en compte par la commande xmodmap au moment de la connexion au compte utilisateur..



J'ai essayé cette méthode, ça marche très bien. Impeccable... J'ai beaucoup appris sur les touches qui étaient un sujet très mystérieux pour moi. Merci smile

Je marque comme résolu.

Hors ligne

#14 22-10-2017 00:29:45

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Caractères parasites entre deux crochets / RESOLU

J'avais testé cette méthode il y a quelques années, mais elle n'avait pas fonctionné.
J'ai été très agréablement surpris qu'elle fonctionne maintenant.

Hors ligne

Pied de page des forums