Je utilise Bitvise SSH Server sur ma machine Windows pour un accès à distance. Le shell de connexion est ZSH, et je utilise également Oh My Zsh avec cela. Cependant, j'ai également essayé BASH et rencontré le même problème. Par conséquent, je suppose que ce problème vient du serveur Bitvise SSH, pas des shells Cygwin ou des émulateurs de terminal côté client.
Le problème peut être remarqué sur le prompt de mon ZSH. Tant que ma session SSH passe par ce serveur Bitvise SSH, il y aura des espaces supplémentaires dans le prompt. Veuillez voir les captures d'écran :
Cette fenêtre est le MinTTY sur cette machine Windows. Quand je l'ouvre, vous pouvez voir qu'il n'y a qu'un espace après ~
(avant que je tape ssh 127.0.0.1
). Cependant, une fois que je me connecte en SSH à la même machine, il y a deux espaces après ~
dans le prompt. De plus, si je fais une autre session SSH (vers la machine tiger
) dans la session Bitvise SSH, le prompt du second a aussi des espaces supplémentaires (prompts soulignés en rouge). Cependant, si je quitte la session Bitvise et je me connecte en SSH à tiger
directement, le prompt est normal (prompts soulignés en vert).
J'ai observé la même chose en me connectant depuis une machine distante (en utilisant gnome-terminal
ou xfce4-terminal
comme émulateur de terminal) à cette machine Windows.
Par conséquent, ma conclusion est que l'émulateur de terminal n'est pas à blâmer pour cela. Cygwin et son ZSH ne sont pas non plus à blâmer, car tout semble bon tant que je ne passe pas par Bitvise.
Je suppose qu'il y a un caractère spécial défini dans le thème Oh My Zsh qui n'est pas traité correctement lors du passage par Bitvise. Cependant, je n'ai pas pu déterminer exactement ce que c'est. Les thèmes Oh My Zsh semblent bons localement sans connexion SSH à Bitvise, et ils semblent bons sur toutes les machines Linux que j'ai. Par conséquent, je pense que cela doit être quelque chose avec Bitvise.
Comme suggéré dans les commentaires, j'ai exécuté set
dans les deux environnements et obtenu les sorties dans deux fichiers texte : bitvise.txt et local.txt. Maintenant, le plus gros problème est que je ne peux pas les comparer en utilisant diff
car diff
affirme qu'ils sont des fichiers binaires (et ils sont différents). Je ne suis pas sûr si cela a quelque chose à voir avec les espaces étranges.
Forcer LANG
sur diff
n'a pas aidé.
$ diff -uN bitvise.txt local.txt
Fichiers binaires bitvise.txt et local.txt différents
$ LANG=en_US.UTF-8 diff -uN bitvise.txt local.txt
Fichiers binaires bitvise.txt et local.txt différents
$ LANG=C diff -uN bitvise.txt local.txt
Fichiers binaires bitvise.txt et local.txt différents
Les deux fichiers sont téléchargés ici : https://drive.google.com/open?id=0B6Pxoys5MF0Bc1d6QUMweUkybHc
J'ai testé différents réglages de TERM
... Ça n'a pas semblé apporter quelque chose de bon. En mettant TERM=linux
a abouti au même résultat qu'avec xterm
.
Mise à jour le 23/05/16
Le problème semble plus difficile que je ne pensais. J'ai trouvé un dossier "C:\Program Files\Bitvise SSH Server\TermInfo" qui contient des fichiers d'information sur le terminal. J'ai remplacé les fichiers de ce dossier par des fichiers similaires que j'ai copiés depuis une machine Ubuntu normale, mais cela n'a pas aidé. J'ai également essayé l'info terminal "cygwin" qui est installée avec Cygwin, sans chance... En fait, le fichier "cygwin" qui vient avec Cygwin est le même que celui qui vient avec Ubuntu...
Je suis à court d'idées maintenant.
Quand je me connecte en SSH au serveur Bitvise SSH, je peux faire exec /bin/bash
pour remplacer la session actuelle par Bash. Cependant, dans ce Bash, si je me connecte en SSH à une autre machine Linux qui utilise Zsh et Oh My Zsh, le même problème persiste.