0

我正在尝试使用JSch. 我在这里尝试了这个例子 虽然我可以连接输出很奇怪。
我得到以下信息:

Last login: Thu Jan 31 19:44:25 2013 from 10.2.251.77

[1mcli:~ # [m  

如果我这样做,ls我会得到:

[0m[01;34m.InstallAnywhere[0m  [00m.bash_history                [00m.bash_profile[0m       
[01;34mbin[0m                             [00msles11-patched[0m  
[01;34m.kbd[0m              [00mindex.html[0m                      [00mtest.sql[0m  
[00m.viminfo[0m          [00;31mipvsadm-1.26-1.src.rpm[0m  
[m[1mcli:~ # [m  

这些是目录内容,但为什么会这样显示?
我在 Eclipse 中运行,这就是我在 Eclipse 输出中看到的。如果我从 Windows 运行它,CMD它会卡住

更新:
我注意到如果我连接到不同的 linux 输出就很好!
只有当我连接到特定的 linux 安装时,我才会看到这些奇怪的字符!知道是什么原因造成的吗?

Update2:
按照@PeterMmm 的链接,我做了printf "äöü" | xxd。“坏”和“好”都给出:
0000000: e4f6 fc
我也做了locale
在“坏”的情况下:

# locale  
LANG=POSIX  
LC_CTYPE=en_US.UTF-8  
LC_NUMERIC="POSIX"  
LC_TIME="POSIX"  
LC_COLLATE="POSIX"  
LC_MONETARY="POSIX"  
LC_MESSAGES="POSIX"  
LC_PAPER="POSIX"  
LC_NAME="POSIX"  
LC_ADDRESS="POSIX"  
LC_TELEPHONE="POSIX"  
LC_MEASUREMENT="POSIX"  
LC_IDENTIFICATION="POSIX"  
LC_ALL=  

在良好的系统中:

LANG=POSIX  
LC_CTYPE=en_US.UTF-8  
LC_NUMERIC="POSIX"  
LC_TIME="POSIX"  
LC_COLLATE="POSIX"  
LC_MONETARY="POSIX"  
LC_MESSAGES="POSIX"   
LC_PAPER="POSIX"  
LC_NAME="POSIX"  
LC_ADDRESS="POSIX"   
LC_TELEPHONE="POSIX"   
LC_MEASUREMENT="POSIX"   
LC_IDENTIFICATION="POSIX"  
LC_ALL=  

配置似乎是一样的。那么可能是什么原因造成的呢?

4

2 回答 2

4

请检查 有趣的外壳输出:[01;32mtestfile.txt[00m 而不是 testfile.txt

((ChannelShell) channel).setPtyType("dumb");

行得通。

于 2014-04-04T19:18:30.500 回答
2

它们是终端仿真的转义序列。我想这与字符编码无关。

更新: 如果调用 ChannelShell#setPty(false),则不会分配伪终端,也不会出现转义序列。

Channel channel=session.openChannel("shell");
((ChannelShell)channel).setPty(false);                  // !!
...
channel.connect();
于 2013-02-01T09:08:46.437 回答