【发布时间】:2016-10-30 14:33:54
【问题描述】:
我正在使用此处提供的有用示例,使用 JSch exec 在远程服务器上执行 shell 脚本。我可以看到脚本返回的回声,最后的退出状态为 0 - 所以乍一看一切都很好。
但是,问题在于脚本本身调用了其他脚本,而这些似乎完全被忽略了,只是被跳过了。
脚本直接调用其他脚本。即脚本的第一行类似于:
script_two.sh
任何人都可以建议任何方法来克服这个问题吗?我确实开始查看“shell”通道而不是“exec”,但这在我的情况下可能很棘手,因为在授予用户访问系统之前,服务器会提供一个表格来填写(姓名,号码,为什么您登录等)- 我还不能以编程方式填写并提交此表单,所以如果可能的话,我想坚持使用 exec。
我对这一切都很陌生,所以欢迎任何帮助/建议!
下面的代码 sn-p。正如我所说,这似乎有效,但是代码中“scriptFileName”表示的sh脚本调用了其他sh脚本,并且这些脚本没有执行。
非常感谢您的帮助,J
JSch jsch = new JSch();
JSch.setConfig(FileTransferConstants.STRICT_HOST_KEY_CHECKING, "no");
Session session = jsch.getSession(username, hostIPAddress, port);
session.setPassword(password);
session.connect();
//create the execution channel over the session
ChannelExec channelExec = (ChannelExec)session.openChannel("exec");
channelExec.setCommand(scriptFileName);
channelExec.connect();
【问题讨论】:
-
"调用其他脚本,这些似乎被完全忽略,只是跳过了" - 脚本如何调用其他脚本?他们是如何被忽视的? “呼出”是否会产生任何错误消息?
-
感谢马丁的回复。该脚本直接调用其他脚本。即脚本的第一行类似于: - script_two.sh 当我以同一用户身份手动运行脚本时,它工作正常,但使用 Jsch shell 远程运行时似乎被忽略了。