3

使用Gradle SSH 插件,我将.jar文件部署到另一台机器。

然后我想在一个分离的screen会话中运行那个 jar。如果应用程序不需要在 STDIN 上输入,运行screen -dmS screen-name java -jar my.jar.

我尝试使用here-string以下列方式提供输入(除了其他方法),但我没有让它们中的任何一个工作:

screen -dmS screen-name java -jar my.jar <<< "firstInputLine
SecondInputLine
"

谁能指出我正确的方向?谢谢!

4

2 回答 2

1

我认为您的问题是您将输入传递给 screen 命令,而不是实际传递给 java 进程。我会这样做:

  1. 使用您的输入创建一个文件,类似于echo "foo" > input.txt
  2. scp该文件到机器
  3. 运行screen命令并使java进程直接读取文件(如果该程序可以这样做)或通过运行bash命令而不是java直接运行命令来正确地管道它。类似的东西screen -dmS screen-name bash \"cat input.txt | java -jar ...\"

免责声明:上述转义只是近似于我的观点;-)

于 2021-06-11T12:31:09.310 回答
1

我目前通过首先创建分离的screen会话然后通过第二次screen调用来解决这个问题,使用屏幕的stuff命令转发输入,不再使用这里的字符串:

screen -dmS screen-name java -jar my.jar && 
screen -S screen-name -p 0 -X stuff "firstInputLine^MsecondInputLine^M"

(^M 被解释为 ENTER)

于 2021-06-11T12:53:32.797 回答