目前我正在使用一个脚本来生成一个守护进程:
screen -r user -X stuff "spawn daemon" screen -r user -X eval "stuff \015"
有没有更简单的方法来发送回车键(“\015”),或者实际上有更好的方法来做到这一点?(我必须使用屏幕。我假设,因为我没有附加屏幕,我将无法获得“spawn daemon”命令的结果/输出。是这样吗?
8aqjt8rx1#
我总是这样做:
screen -r user -X stuff "spawn daemon^M"
在这里,我通过在命令行上按ctrl-v,然后按Enter来获得^M。在bash和Vim中,ctrl-v可以用来转义像Enter这样的字符,否则这些字符会有特殊效果。
ecr0jaav2#
至于第二个问题,您可以启用日志记录,并从日志文件中读取。
dohp0rv53#
这个解决方案在我的情况下是有效的:
screen -r user -X stuff "spawn daemon$(printf \\r)"
qyyhg6bp4#
发送CR:
echo -e "Some text\015" > /dev/pts/1
发送LF:
echo -e "Some text\012" > /dev/pts/1
将设备路径中的编号替换为实际屏幕编号。
8yparm6h5#
对我来说,这里提到的解决方案和类似的SO线程,不工作。我在MacOS 13.5.2上使用Homebrew的最新screen版本4.00.03。我想在后台生成一个屏幕会话,然后在我的脚本中执行一个命令。所以我是这么做的
screen
screen -dmS myLongRunning screen -S myLongRunning -p 0 -X stuff "/path/to/script $*\n"
当我连接到该会话时,它会准确地读取在命令提示符下键入的内容,但不会“发送”Enter等效项:/path/to/script ''\n这是相同的,无论我使用哪种控制字符。我试着:
/path/to/script ''\n
\n
\r
^M
^m
\015
我发现唯一有效的变体是anthon提到的变体:
screen -S myLongRunning -p 0 -X stuff "/path/to/script $*$(printf \\r)"
真管用!
5条答案
按热度按时间8aqjt8rx1#
我总是这样做:
在这里,我通过在命令行上按ctrl-v,然后按Enter来获得^M。在bash和Vim中,ctrl-v可以用来转义像Enter这样的字符,否则这些字符会有特殊效果。
ecr0jaav2#
至于第二个问题,您可以启用日志记录,并从日志文件中读取。
dohp0rv53#
这个解决方案在我的情况下是有效的:
qyyhg6bp4#
发送CR:
发送LF:
将设备路径中的编号替换为实际屏幕编号。
8yparm6h5#
对我来说,这里提到的解决方案和类似的SO线程,不工作。我在MacOS 13.5.2上使用Homebrew的最新
screen
版本4.00.03。我想在后台生成一个屏幕会话,然后在我的脚本中执行一个命令。所以我是这么做的
当我连接到该会话时,它会准确地读取在命令提示符下键入的内容,但不会“发送”Enter等效项:
/path/to/script ''\n
这是相同的,无论我使用哪种控制字符。我试着:
\n
\r
^M
^m
\015
我发现唯一有效的变体是anthon提到的变体:
真管用!