我正在尝试运行使用类似本地Linux逻辑路径的命令cat $test_dir/test.dat
,但是该逻辑路径$test_dir
(这是一个用户环境变量)不能通过来使用ChannelExec
。但是当我使用Interactive时ChannelShell
,我可以看到用户变量,并且命令在交互式会话上运行良好。我只能从“
exec”会话中查看系统级环境变量。使用JSch库甚至可以实现,如果是,那么我应该如何实现它;如果不是,我应该使用哪个库来实现?
在下面添加我的课程代码:`public class SecureShell {
private static final Logger logger = LogManager.getLogger(SecureShell.class);
private String uName;
private String pWord;
private String hName;
private int port;
private Session session = null;
private Channel channel = null;
/**Create an instance to start and stop the remote shell and execute commands remotely via java.
*
* @param uName
* host username
* @param pWord
* host password
* @param hName
* host name
* @param port
* host port number
*/
public SecureShell(String uName, String pWord, String hName, int port) {
this.uName = uName;
this.pWord = pWord;
this.hName = hName;
this.port = port;
}
/**Create an instance to start and stop the remote shell and execute commands remotely via java.
*
*@param uName
* host username
* @param pWord
* host password
* @param hName
* host name
*/
public SecureShell(String uName, String pWord, String hName) {
this.uName = uName;
this.pWord = pWord;
this.hName = hName;
this.port = 22;
}
/**Start the session with the host.
* @return
* true if the session started successfully, false otherwise
*/
public boolean startSession() {
JSch jsch = new JSch();
try {
session = jsch.getSession(uName, hName, port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(pWord);
session.connect();
} catch (JSchException jsche) {
logger.error(jsche.getMessage());
return false;
}
return true;
}
/** Execute commands on the host;
* @param command
* command to be executed on the host.
* @return
* status of the execution
*/
public int execute(String command) {
int status = -1;
if(session != null && session.isConnected()) {
try {
channel = session.openChannel("exec");
//((ChannelExec)channel).setEnv("LC_XXX", "xxxxxxx");
((ChannelExec)channel).setPty(true);
((ChannelExec) channel).setCommand(command);
InputStream in = channel.getInputStream();
channel.connect();
byte[] buffer = new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(buffer, 0, 1024);
System.out.print(new String(buffer, 0, i));
if(i<0)
break;
}
if(channel.isClosed()){
if(in.available()>0)
continue;
status = channel.getExitStatus();
break;
}
}
} catch (JSchException jsche) {
logger.error(jsche.getMessage());
} catch (IOException ioe) {
logger.error(ioe.getMessage());
} finally {
if(channel!=null && channel.isConnected())
channel.disconnect();
}
}
return status;
}
/**Stop the session with the remote.
*
*/
public void stopSession() {
if(session!=null && session.isConnected())
session.disconnect();
}
public static void main(String[] args) {
SecureShell ssh = new SecureShell("user", "password", "hostname");
ssh.startSession();
System.out.println(ssh.execute("env"));
ssh.stopSession();
}
}`
由于您没有打开交互式外壳,因此不会设置环境变量。但是,可以将bash命令与–login一起使用(有关更多详细信息,请参见man
bash)以获取所需的结果。
bash --login -c 'command arg1 ...'"
问题内容: 在Unix上,是否有任何方法可以使一个进程更改另一个环境的变量(假设它们都由同一用户运行)?一般的解决方案是最好的,但如果不是,那么一个孩子是另一个孩子的特殊情况呢? 编辑:如何通过gdb? 问题答案: 通过gdb: 当然,这是一个很讨厌的黑客,应该只在调试场景中进行。
我有一个Postman集合,我正在尝试与newman一起工作,但我的环境变量没有被使用。 请求URL只是{{URL}},然后我有一个同名的环境变量。我正在使用以下命令运行测试: 我可以在报告中看到环境文件被正确读取,并且包含了我想要使用的变量,但请求失败,报告显示请求是“url”:“https://{url}}”,而不是我真正想要的。 当然,请求失败是因为“https://{{url}}”不是有效
问题内容: 我想将背景URL存储在自定义属性(CSS变量)中,并将其与background属性一起使用。但是,当使用字符串作为参数时,我找不到插值的方法。 这是我的示例代码: 我知道可以使用插值函数在Sass或LESS中轻松完成此操作,但我很好奇是否有一种无需任何预处理器的方法。 问题答案: 您可以使用大多数CSS函数执行插值,包括的示例。实际上,插值是自定义属性的主要功能之一。 但是,您不能使用
问题内容: 我开始使用Grunt,并希望将变量传递给我通过exec运行的PhantomJS脚本。我想要做的是为脚本传递URL,以从中获取屏幕截图。任何帮助将不胜感激,谢谢! 达伦 咕script声脚本 screenshot.js 问题答案: 命令行参数可通过模块(Module )访问。第一个始终是脚本名称,然后是后续参数 该脚本将枚举所有参数,并将其写到控制台。 在您的情况下,解决方案是 咕unt
我在Kubernetes集群中有一个服务和RabbitMQ。我想做的是,我希望服务的不同实例(或副本)在启动时声明一个全新的队列。这些队列将绑定到同一个exchange。 我可以在这里放一个最后的变量吗: 本质上,我只需要一种方法,用生成的名称创建一个队列,然后使用@RabbitListener侦听这个队列。
我是一名学生,我想知道是否有一种方法可以将一个变量从它的范围块中取出,用于本地范围?我正在尝试对一个商店进行编码,在那里用户可以选择他们想要购买什么,他们想要购买多少,并给他们同一商品的总付款。现在在块范围之外,我想给出他们购买每件商品的总金额。这是我的代码: 感谢: