我正在尝试使用JSch
。我试过了here这个例子
虽然我可以连接输出很奇怪
我得到以下内容:
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=
配置似乎是一样的。那么可能导致这种情况呢?
答案 0 :(得分:2)
请检查 Funny Shell Output: [01;32mtestfile.txt[00m instead of testfile.txt
((ChannelShell) channel).setPtyType("dumb");
诀窍。
答案 1 :(得分:1)
它们是终端仿真的转义序列。我猜这与字符编码没有关系。
<强>更新强> 如果调用ChannelShell#setPty(false),则不会分配伪终端,也不会出现转义序列。
Channel channel=session.openChannel("shell");
((ChannelShell)channel).setPty(false); // !!
...
channel.connect();