首页 > Java > java教程 > 为什么使用 JSch 通过 Java 执行某些 Unix 命令时会失败并显示'未找到命令”?

为什么使用 JSch 通过 Java 执行某些 Unix 命令时会失败并显示'未找到命令”?

Mary-Kate Olsen
发布: 2024-11-28 02:42:11
原创
203 人浏览过

Why Do Certain Unix Commands Fail with

使用 JSch 通过 Java 执行时,某些 Unix 命令失败并出现“未找到命令”错误

通过 Java 执行 Unix 命令时会出现此问题使用 JSch 库。当“air not find”之类的命令失败时,尽管在 SSH 客户端中工作,仍需要进一步调查。

根本原因:

与交互式 SSH 会话不同, JSch 中的“exec”通道不分配伪终端。这可能会导致执行一组不同的启动脚本,从而导致不同的环境。在这种情况下,PATH环境变量可能设置不同,导致“air”可执行文件不可用。

解决方案:

有多种方法可以解决此问题问题,按优先顺序排列:

  1. 完整路径执行:
    在命令中使用可执行文件的完整路径,消除对环境的依赖。
  2. 启动脚本修改:
    调整启动脚本设置交互式和非交互式会话的 PATH 一致。
  3. 登录 Shell执行:
    使用 --login 开关通过登录 shell 显式运行命令。
  4. 环境修改:
    将命令本身的环境更改为设置必要的 PATH 和/或其他变量。
  5. 强制伪终端分配:
    (不推荐)使用 setPty(true) 强制为“exec”通道进行伪终端分配,但要注意潜在的副作用。

相关问题:

其他类似问题已经遇到并在下面讨论资源:

  • 当使用 JSch 通过 Java 执行时,即使启用了 setPty,某些 Unix 命令也会失败,并显示“...未找到”
  • 使用 JSch 执行的命令的行为与 SSH 终端中的行为不同(绕过“是/”否”的确认提示消息)
  • JSch:有没有办法将用户环境变量暴露给“exec”通道?
  • 使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,并显示“没有此类文件或目录”

以上是为什么使用 JSch 通过 Java 执行某些 Unix 命令时会失败并显示'未找到命令”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板