bash - 将文字美元符号填充到现有屏幕中
问题描述
我有一个在后台运行的屏幕。我想以编程方式向该屏幕发送命令。我一直在这样做:
screen -x <screen.PID> -p 0 -X stuff 'echo $varname'
它一直运行良好。但是,我最近升级了screen
from 4.00.03
to4.03.01
的版本,并且相同的命令不再有效。现在,screen
在打印之前拦截我的命令和 eval 的 shell 变量。因此,例如,而不是发送
echo $varname
它会发送
echo var_value
如果$varname="var_value"
. 一种解决方案是在我的命令中转义$
——它适用于较新版本的屏幕,但它不适用于旧版本。我想找到一个适用于所有版本的命令,因为我的脚本部署在许多机器上,我无法确定screen
安装了哪个版本(或者何时进行了此更改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"; }
推荐阅读
- javascript - 实现数据地图的放大
- php - php如何按条件将数组字符串一分为二
- java - 为什么 HashSet 对象反序列化在我的代码中给出取消选中警告?| 爪哇 | IntelliJ 理念 |
- unix - 如何在 UNIX 中使用 source 命令从文件中获取变量的名称?
- python - Pandas DataFrame 列的最大值和最小值的差异
- c++ - 从另一个函数模板调用函数模板
- python - 为什么来自 np 数组的 matplotlib 图像以红色为主?
- python - 如何将多个numpy数组组合成一个字典列表
- javascript - 如何在 fetch then/response 函数中访问请求对象
- apache-spark - 数据集中reduce方法有哪些有用的用例