簡體   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