JSch 在一个会话中执行多个 linux 命令

Posted

技术标签:

【中文标题】JSch 在一个会话中执行多个 linux 命令【英文标题】:JSch executing multiple linux commands in one session 【发布时间】:2015-06-11 18:08:49 【问题描述】:

我正在做一个项目,我打算在其中创建一个 Java GUI 应用程序,该应用程序连接到 ssh 服务器并在服务器上执行远程命令。我愿意使用 JSch 库。我的目标是制作按钮和文本字段,它们将为用户提供发送命令和轻松获得回复的能力。我的意思是,用户不会打开 xShell 并提示“grep "hi" /usr/file.txt”,而是从列表中选择路径,然后在文本字段中输入“hi”,然后按下 grep 按钮。

问题是,我找不到在一个会话中执行多个 linux 命令的解决方案(如果我无法重定向其输入和输出流,我不想要 shell)(我也不想要解决方案“cd. . \n dir \n ls -l" 工作正常但不能解决我的问题)发送应从相关 GUI 组件获取的参数。

由于我没有对JSch的示例代码做太多修改,你可以在这里查看代码:http://www.jcraft.com/jsch/examples/Exec.java.html

从现在开始谢谢。

【问题讨论】:

shell 是要走的路。 @ScaryWombat 嗨,我可以将 shell 的输入和输出流重定向到我的 GUI 组件吗?如果是,如何?从现在开始谢谢。 我不确定你是否可以直接这样做,但是重定向到一个字符串然后从字符串更新你的 GUI 很容易 您链接到的示例程序完全能够运行多个命令序列。实际上,该程序的默认设置是两条命令管道。您说“cd .. \n dir \n ls -l”解决方案工作正常,但不能解决您的问题。 你的问题是什么? @Kenster 例如,当用户想要从目录列表中切换到一个目录时,选择一个文件并在该文件中进行 grep 搜索, --("cd ..") -- (“grep hi smp.txt”),在第一步中他的路径发生了变化,但在第二步中路径被重置(因为 exec 通道这样做)。那我该如何解决呢? 【参考方案1】:

如果使用exec 类型的频道,您可以将命令与 && 结合使用:

channel.setCommand(". ./.profile && env");

【讨论】:

以上是关于JSch 在一个会话中执行多个 linux 命令的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSch 的多个命令

使用java JSch库一个接一个地执行多个命令

使用java中的jsch在linux中通过sudo命令执行shell脚本以启动服务

使用jsch连接到linux上,然后执行shell命令,返回的结果中存在乱码,各位大大怎么解决?

JSCH执行linux命令

java使用jsch远程链接linux执行命令