运行 包含带屏幕的 STDIN 重定向的命令
Running a command that includes an STDIN redirect with screen
使用 Gradle SSH plugin 我将 .jar
文件部署到另一台机器。
然后我想 运行 在分离的 screen
会话中那个 jar。
如果应用程序不需要在 STDIN 上输入,这将不是问题,运行ning screen -dmS screen-name java -jar my.jar
.
我尝试使用 here-string 以下列方式提供输入(除了其他方法),但我没有让它们中的任何一个工作:
screen -dmS screen-name java -jar my.jar <<< "firstInputLine
SecondInputLine
"
谁能指出我正确的方向?谢谢!
我认为您的问题是您将输入通过管道传输到屏幕命令,而不是实际传输到 java 进程。我会按照以下方式进行:
- 根据您的输入创建一个文件,类似于
echo "foo" > input.txt
scp
那个文件到机器
- 运行
screen
命令并使 java 进程直接读取文件(如果该程序可以这样做)或通过 运行ning 正确地传输它bash
命令直接代替 java
命令。类似于 screen -dmS screen-name bash \"cat input.txt | java -jar ...\"
免责声明:上述转义只是近似地表达我的观点 ;-)
我目前解决这个问题的方法是首先创建分离的 screen
会话,然后使用第二个 screen
调用,使用屏幕的 stuff
命令转发输入,而不是使用此处-不再是字符串:
screen -dmS screen-name java -jar my.jar &&
screen -S screen-name -p 0 -X stuff "firstInputLine^MsecondInputLine^M"
(^M 被解释为 ENTER)
使用 Gradle SSH plugin 我将 .jar
文件部署到另一台机器。
然后我想 运行 在分离的 screen
会话中那个 jar。
如果应用程序不需要在 STDIN 上输入,这将不是问题,运行ning screen -dmS screen-name java -jar my.jar
.
我尝试使用 here-string 以下列方式提供输入(除了其他方法),但我没有让它们中的任何一个工作:
screen -dmS screen-name java -jar my.jar <<< "firstInputLine
SecondInputLine
"
谁能指出我正确的方向?谢谢!
我认为您的问题是您将输入通过管道传输到屏幕命令,而不是实际传输到 java 进程。我会按照以下方式进行:
- 根据您的输入创建一个文件,类似于
echo "foo" > input.txt
scp
那个文件到机器- 运行
screen
命令并使 java 进程直接读取文件(如果该程序可以这样做)或通过 运行ning 正确地传输它bash
命令直接代替java
命令。类似于screen -dmS screen-name bash \"cat input.txt | java -jar ...\"
免责声明:上述转义只是近似地表达我的观点 ;-)
我目前解决这个问题的方法是首先创建分离的 screen
会话,然后使用第二个 screen
调用,使用屏幕的 stuff
命令转发输入,而不是使用此处-不再是字符串:
screen -dmS screen-name java -jar my.jar &&
screen -S screen-name -p 0 -X stuff "firstInputLine^MsecondInputLine^M"
(^M 被解释为 ENTER)