繁体   English   中英

打开终端失败:缺少或不合适的终端:从 Java 程序运行 shell 脚本时未知

[英]open terminal failed: missing or unsuitable terminal: unknown when running shell script from Java program

我有一个 Java 程序运行一个带有进程的 shell 脚本,但是由于某种原因,当我尝试运行它时,它会抛出一个错误open terminal failed: missing or unsuitable terminal: unknown 从其他 SO 问题来看,我认为这是一个 tmux 问题,但我不确定如何解决它。 这是调用脚本的代码:

ProcessBuilder pb = new ProcessBuilder("/Users/user/eclipse-workspace/project/start.sh");
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
System.out.println("output: ");
String s;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

这是shell脚本:

#! /bin/sh
ssh -tt -i ~/.ssh/ssh-key.key opc@___._.___.___ tmux attach -d << END 
    ./run.sh 
END
exit 0

我试过从终端运行脚本,它可以从终端运行,但是当我运行 Java 程序时它不起作用。

问题是您正在附加到交互式tmux会话,您需要有一个支持光标移动代码等的终端。

简单的解决方法是不附加; 只需将要运行的命令提交到会话中即可。

ssh -tt -i ~/.ssh/ssh-key.key opc@___._.___.___ tmux send-keys './run' C-m

这显然要求远程tmux会话中运行的任何东西都处于可以提交 shell 命令的状态,即在 shell 提示符或类似提示下。 为了稳健性,您可能需要采取额外措施来确保始终如此,或者重构您的解决方案以避免在tmux内部运行,例如通过让命令将其输出重定向到一个文件,您可以随时从任何终端检查它(尽管这假设您随后也不需要与之交互)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM