如何将命令传递给屏幕会话?

问题描述 投票:-1回答:2

我正在编写一个Linux shell脚本,我需要在其中启动一个新的屏幕会话,在屏幕上运行node.js服务器,然后从屏幕上分离,以便我的服务器在后台运行。

现在,这些是我手动运行的命令:

screen
node server.js
[detach screen]

但是,我需要一种通过脚本自动执行此操作的方法,如果我只是在shell脚本中使用上述命令,它会创建屏幕并卡在那里。如何将“node server.js”命令传递给screen命令?

编辑:

根据建议的答案我有一个有效的脚本,除了我需要手动创建一个屏幕并在运行之前从中分离。我尝试添加screen -d -m作为创建分离屏幕的第一行,但脚本在该行之后挂起。

tempfile=$(mktemp)
indices=`tail -1 debug.log`
cat > $tempfile <<EOF
node server $indices
EOF
screen -X readbuf $tempfile 
screen -X paste . 
rm -f $tempfile

如何使用脚本创建和分离屏幕?

这也不起作用:屏幕-d

node.js linux bash gnu-screen
2个回答
1
投票

它就像这样简单: screen -md node server.js 这需要命令作为服务运行(就像它一样),否则屏幕会立即停止。

还可以选择设置会话的名称(例如“session-name”): screen -mdS session-name node server.js 然后您可以使用以下命令附加到屏幕: screen -rd session-name 如果要将所有输出重定向到文件,可以这样做: screen -mdS session-name bash -c 'node server.js &> output.log' 然后您可以用例如: tail -f output.log 监视输出

您可以使用以下网址列出正在运行的屏幕: screen -ls screen -list

示例:在分离的屏幕中启动Python3 Web服务器

启动一个Python3 Web服务器,侦听端口8000,它在当前目录中提供文件,位于命名的分离屏幕中: screen -mdS my-web-server python3 -mhttp.server 或者,记录到文件: screen -mdS my-web-server bash -c 'python3 -mhttp.server &> output.log' 对于Python 2.x,它看起来像这样: screen -mdS my-web-server bash -c 'python -mSimpleHTTPServer &> output.log'


0
投票

编辑:试试这个:

tempfile=$(mktemp)
cat > $tempfile <<EOF
node server.js
EOF
screen -S SessionName -X readbuf $tempfile; screen -RdS SessionName
screen -X paste .
rm -f $tempfile

它应该创建临时文件,创建一个名为SessionName的屏幕并运行命令,然后删除临时文件。如果有效,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.