Sto usando Bitvise SSH Server sul mio computer Windows per l'accesso remoto. La shell di login è ZSH, e sto usando Oh My Zsh con esso. Tuttavia, ho anche provato BASH e ho avuto lo stesso problema. Quindi penso che questo problema sia con il server SSH di Bitvise, non con le mie shell Cygwin o con gli emulatori di terminale lato client.
Il problema può essere notato sul prompt del mio ZSH. Finché la mia sessione SSH passa attraverso questo server SSH Bitvise, ci saranno degli spazi in più nel prompt. Si prega di vedere gli screenshot:
Questa finestra è il MinTTY su quella macchina Windows. Quando lo apro, puoi vedere che c'è solo uno spazio finale dopo ~
(prima di digitare ssh 127.0.0.1
). Tuttavia, una volta inserito SSH nella stessa macchina, ci sono due spazi finali dopo ~
nel prompt. Inoltre, se faccio un'altra sessione SSH (al tiger
macchina) all'interno della sessione SSH di Bitvise, il prompt del secondo ha anche spazi aggiuntivi (prompt sottolineati rossi). Comunque se esco dalla sessione di Bitvise e SSH a tiger
, direttamente, il prompt è normale (prompt sottolineati verdi).
Ho osservato la stessa cosa quando mi collegavo da una macchina remota (usando gnome-terminal
o xfce4-terminal
come emulatore di terminale) su quella macchina Windows.
Pertanto, la mia conclusione è, l'emulatore di terminale non è la colpa per questo. Anche il Cygwin e il suo ZSH non sono da biasimare, perché tutto sembra a posto finchè non passo attraverso Bitvise.
La mia ipotesi è che ci sia un personaggio speciale definito nel tema Oh My Zsh che non viene elaborato correttamente quando passa attraverso Bitvise. Tuttavia non ho potuto scoprire cosa sia esattamente. I temi Oh My Zsh hanno un bell'aspetto a livello locale senza una connessione SSH di Bitvise, e hanno un bell'aspetto su tutte le macchine Linux che ho. Quindi penso che dovrebbe essere qualcosa con Bitvise.
Come suggerito nei commenti, ho corso set
in entrambi gli ambienti e ha ottenuto gli output scaricati in due file di testo: bitvise.txt e local.txt . Ora il problema più grande è che non posso confrontarli usando diff
perché diff
afferma che sono file binari (e differiscono). Non sono sicuro che questo abbia qualcosa a che fare con gli spazi strani.
forzatura LANG
sopra diff
non ha aiutato
$ diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ
$ LANG=en_US.UTF-8 diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ
$ LANG=C diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ
I due file sono caricati qui: https://drive.google.com/open?id=0B6Pxoys5MF0Bc1d6QUMweUkybHc
Testato un po 'diverso TERM
impostazioni ... Non sembra fare nulla di buono. Ambientazione TERM=linux
risultato lo stesso con xterm
.
Aggiornato il 23/05/16
Il problema sembra essere più difficile di quanto mi aspettassi. Ho trovato una cartella "C: \ Programmi \ Bitvise SSH Server \ TermInfo" che contiene i file di informazioni del terminale. Ho sostituito i file in quella cartella con i file simili che ho copiato da una normale macchina Ubuntu, ma non mi ha aiutato. Ho anche provato le informazioni sul termine "cygwin" che sono state installate con Cygwin, senza fortuna ... In realtà il file "cygwin" che viene fornito con Cygwin è lo stesso con quello fornito con Ubuntu ...
Ora sono a corto di idee.
Quando eseguo SSH nel server SSH di Bitvise, posso farlo exec /bin/bash
per sostituire la sessione corrente con Bash. Tuttavia, in questo Bash, se eseguo SSH in un altro computer Linux che utilizza Zsh e Oh My Zsh, lo stesso problema persiste.
set > local.txt
localmente e fatto set > bitvise.txt
in una sessione SSH a localhost
. Ora ho ottenuto i due file, entrambi molto grandi e non esattamente identici. però diff
afferma che sono file binari quindi non emettono differenze nelle righe ... Sto ancora cercando di capire un modo per questo ...
man iconv
per la conversione
diff
(o troppe differenze)?
LANG=C diff -uN file1 file2
o LANG=en_US.UTF-8 diff -uN file1 file2
set
per scaricare le impostazioni complete nei diversi casi. Può essere che tu possa trovare una discrepanza