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 尝试了相同的命令,所以我得到了我期望的不同结果(在 lcdlls 正常工作之后)。如果这不是错误,我该如何解决?

是的,这是一个错误。

Sftp.java 示例中 lcd 命令的实现调用了 ChannelSftp.lcd() 方法。该调用更改字段 ChannelSftp.lcwd 的值,可以使用 ChannelSftp.lpwd() 方法检索该值。

但是 lls 命令的实现根本不使用 ChannelSftp,甚至不使用它的 ChannelSftp.lpwd(),所以它总是列出进程的实际本地工作目录,而不是"virtual" ChannelSftp 的本地工作目录。

解决方案:

  • 修复 Sftp.java 以使用 ChannelSftp.lpwd()
  • 使用绝对路径。