gpt4 book ai didi

java - 为什么 cd 命令无法使用 Java JSch?

转载 作者:行者123 更新时间:2023-12-01 06:00:36 24 4
gpt4 key购买 nike

我刚刚学习Java和Jsch,我可以让它运行其他命令,但不能运行cd。 SSHManager sendCommand 函数返回的错误代码不是 null,而是一些每次都不一样的不可读的字符串(也许这意味着它是 null,对 Java 的内部工作不太熟悉)。

知道为什么不吗?类似的问题在这里JSch - Why doesn't CD work?但没有得到答复。

我不会在这里复制并粘贴整个 SSHManager 类 - 有用的答案以及我正在尝试遵循的完整代码。 Run a command over SSH with JSch

示例代码如下:

import SSH.SSHManager;
public class src
{
int ERROR = 0;
public static void main(String[] args)
{
String username = "debian";
String password = "temppwd";
String ipadd = "192.168.7.2";
SSHManager ssh = new SSHManager(username, password, ipadd, "");
ssh.connect();

String out = "";

//this doesn't work, printing output as bytes to show how weird it is
out = ssh.sendCommand("cd Desktop");
System.out.println(out.getBytes());

//some other test commands
out = ssh.sendCommand("mkdir test");
System.out.println(out);
out = ssh.sendCommand("ls");
System.out.println(out);
ssh.sendCommand("logout");
}
}

Eclipse 控制台的输出(bin 和 Desktop 已位于根目录中):

[B@b065c63

bin
Desktop
test

最佳答案

通过 SSH“exec” channel (SSHManager.sendCommand 背后的内容)执行的每个命令都在其自己的 shell 中执行。因此命令之间没有影响。

要在同一个 shell 中执行多个命令,只需使用服务器 shell 的适当语法即可。大多数 *nix shell 使用分号或双 & 符号(具有不同的语义)。

就您而言,双与号会更合适。

cd Desktop && mkdir test && ls

另请参阅Multiple commands using JSch .

<小时/>

但是,如果您想读取命令输出,您将很难区分一个命令的输出在哪里结束,而后续命令的输出从哪里开始。更不用说如果您想检查命令退出代码了。

那么最好以不需要上下文的方式在其自己的“exec” channel 中执行每个命令。在您的情况下,这意味着使用完整路径:

mkdir Desktop/test
ls Desktop

另请参阅How to perform multiple operations with JSch .

<小时/>

此外,由于您只打算使用文件操作,因此实际上根本不应该执行 shell 命令。使用标准 SSH API 进行文件操作,即 SFTP。

关于java - 为什么 cd 命令无法使用 Java JSch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60608260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com