首页 > 解决方案 > 将文字美元符号填充到现有屏幕中

问题描述

我有一个在后台运行的屏幕。我想以编程方式向该屏幕发送命令。我一直在这样做:

screen -x <screen.PID> -p 0 -X stuff 'echo $varname'

它一直运行良好。但是,我最近升级了screenfrom 4.00.03to4.03.01的版本,并且相同的命令不再有效。现在,screen在打印之前拦截我的命令和 eval 的 shell 变量。因此,例如,而不是发送

echo $varname

它会发送

echo var_value

如果$varname="var_value". 一种解决方案是在我的命令中转义$——它适用于较新版本的屏幕,但它不适用于旧版本。我想找到一个适用于所有版本的命令,因为我的脚本部署在许多机器上,我无法确定screen安装了哪个版本(或者何时进行了此更改screen)。

标签: bashgnu-screen

解决方案


$一种解决方法是在标志处拆分要发送到屏幕会话的字符串:

screen -x <screen.PID> -p 0 -X stuff 'echo $'
screen -x <screen.PID> -p 0 -X stuff 'varname'

我已经检查过它是否适用于屏幕版本4.03.01,我不明白为什么它不应该适用于其他不尝试在stuff命令中扩展变量的版本。

编辑

字符串拆分可以自动进行如下:

echo -n 'PUT YOUR STRING HERE' | {while read -r -d '$' x; do screen -x <screen.PID> -p 0 -X stuff "$x\$"; done; screen -x <screen.PID> -p 0 -X stuff "$x"; }

推荐阅读