JSch lls 命令不反映 lcd 命令的目录更改
JSch lls command does not reflect directory change by lcd command
我正在 Java 中使用 JSch 库开发一个 SFTP 项目。
我目前使用的代码是:http://www.jcraft.com/jsch/examples/Sftp.java.html
我遇到的问题是:
我的默认本地目录是这样的:c:/users/myusername/jsch/
我用 lcd
命令将本地目录更改为 c:/
。之后,我用 lpwd
测试它,如我所料,returns "Local working directory: C:\"。但在那之后,我执行 lls
命令,它在开头列出目录 (c:/users/myusername/jsch/
),而不是 c:/
。
这是库中的错误吗?因为我用 XShell 尝试了相同的命令,所以我得到了我期望的不同结果(在 lcd
、lls
正常工作之后)。如果这不是错误,我该如何解决?
是的,这是一个错误。
Sftp.java
示例中 lcd
命令的实现调用了 ChannelSftp.lcd()
方法。该调用更改字段 ChannelSftp.lcwd
的值,可以使用 ChannelSftp.lpwd()
方法检索该值。
但是 lls
命令的实现根本不使用 ChannelSftp
,甚至不使用它的 ChannelSftp.lpwd()
,所以它总是列出进程的实际本地工作目录,而不是"virtual" ChannelSftp
的本地工作目录。
解决方案:
- 修复
Sftp.java
以使用 ChannelSftp.lpwd()
或
- 使用绝对路径。
我正在 Java 中使用 JSch 库开发一个 SFTP 项目。
我目前使用的代码是:http://www.jcraft.com/jsch/examples/Sftp.java.html
我遇到的问题是:
我的默认本地目录是这样的:c:/users/myusername/jsch/
我用 lcd
命令将本地目录更改为 c:/
。之后,我用 lpwd
测试它,如我所料,returns "Local working directory: C:\"。但在那之后,我执行 lls
命令,它在开头列出目录 (c:/users/myusername/jsch/
),而不是 c:/
。
这是库中的错误吗?因为我用 XShell 尝试了相同的命令,所以我得到了我期望的不同结果(在 lcd
、lls
正常工作之后)。如果这不是错误,我该如何解决?
是的,这是一个错误。
Sftp.java
示例中 lcd
命令的实现调用了 ChannelSftp.lcd()
方法。该调用更改字段 ChannelSftp.lcwd
的值,可以使用 ChannelSftp.lpwd()
方法检索该值。
但是 lls
命令的实现根本不使用 ChannelSftp
,甚至不使用它的 ChannelSftp.lpwd()
,所以它总是列出进程的实际本地工作目录,而不是"virtual" ChannelSftp
的本地工作目录。
解决方案:
- 修复
Sftp.java
以使用ChannelSftp.lpwd()
或 - 使用绝对路径。