java - 在 jsch ChannelExec 上设置环境变量

标签 java ssh jsch

我想在 jsch 的 ChannelExec(不是 ChannelShell)中运行远程命令。显然没有加载环境变量,但我的命令需要它们:

_channel.setCommand("source /etc/bash.bashrc; source ~/.bashrc; echo $LD_LIBRARY_PATH");
_channel.connect();

不返回任何内容,尽管 LD_LIBRARY_PATH 在我的 ~/.bashrc 中设置。

_channel.setEnv("LD_LIBRARY_PATH", "/my/add/path:$LD_LIBRARY_PATH");
_channel.setCommand("echo $LD_LIBRARY_PATH");
_channel.connect();

也不起作用——echo 命令仍然没有输出。

知道哪里出了问题吗?我到底什么时候必须调用 setEnv?在执行 connect() 之前还是之后?为什么通过 source 的隐式解决方案不起作用?

最佳答案

我现在找到了解决方法,但这不是解决方案。我的猜测是,无论是在 JSch 中还是在 Open SSH 服务器中,setEnv() 都是错误的。

解决方法:

_channel.setCommand("export LD_LIBRARY_PATH=\"foo\" && echo $LD_LIBRARY_PATH");

关于java - 在 jsch ChannelExec 上设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366914/

相关文章:

java - JSch 中的 Telnet 支持

JAVA JSch连接CISCO设备65XX路由器

java - 在java中绘制其他像素

java - 从 XML 响应中解析西类牙语字符(á、é、í、ó、ú)时出现问题

java - 如何使用 java Swing 在右侧组件上显示我的 jframe?

windows - 从 Visual Studio 2017 连接到适用于 Linux 的 Windows 子系统

python - 使用结构运行子进程时出现 EOFError

.net - Windows 10 上的 SSH.NET 如何在我们的远程 Linux 机器上启动一个保持运行的进程?

android - 我想了解文件在 SFTP 服务器上的位置

java - java中Do/While循环的问题