unix 有没有更简单的方法在GNU屏幕中发送ENTER键?

j7dteeu8  于 2023-10-18  发布在  Unix
关注(0)|答案(5)|浏览(129)

目前我正在使用一个脚本来生成一个守护进程:

screen -r user -X stuff "spawn daemon"
screen -r user -X eval "stuff \015"

有没有更简单的方法来发送回车键(“\015”),或者实际上有更好的方法来做到这一点?(我必须使用屏幕。
我假设,因为我没有附加屏幕,我将无法获得“spawn daemon”命令的结果/输出。是这样吗?

8aqjt8rx

8aqjt8rx1#

我总是这样做:

screen -r user -X stuff "spawn daemon^M"

在这里,我通过在命令行上按ctrl-v,然后按Enter来获得^M。在bash和Vim中,ctrl-v可以用来转义像Enter这样的字符,否则这些字符会有特殊效果。

ecr0jaav

ecr0jaav2#

至于第二个问题,您可以启用日志记录,并从日志文件中读取。

dohp0rv5

dohp0rv53#

这个解决方案在我的情况下是有效的:

screen -r user -X stuff "spawn daemon$(printf \\r)"
qyyhg6bp

qyyhg6bp4#

发送CR:

echo -e "Some text\015" > /dev/pts/1

发送LF:

echo -e "Some text\012" > /dev/pts/1

将设备路径中的编号替换为实际屏幕编号。

8yparm6h

8yparm6h5#

对我来说,这里提到的解决方案和类似的SO线程,不工作。我在MacOS 13.5.2上使用Homebrew的最新screen版本4.00.03。
我想在后台生成一个屏幕会话,然后在我的脚本中执行一个命令。所以我是这么做的

screen -dmS myLongRunning
screen -S myLongRunning -p 0 -X stuff "/path/to/script $*\n"

当我连接到该会话时,它会准确地读取在命令提示符下键入的内容,但不会“发送”Enter等效项:
/path/to/script ''\n
这是相同的,无论我使用哪种控制字符。我试着:

  • \n
  • \r
  • ^M
  • ^m
  • \015

我发现唯一有效的变体是anthon提到的变体:

screen -S myLongRunning -p 0 -X stuff "/path/to/script $*$(printf \\r)"

真管用!

相关问题