关于给screen导入命令的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
cnxk
帖子: 14
注册时间: 2020-01-08 14:43
系统: Linux version 3.2.40

关于给screen导入命令的问题

#1

帖子 cnxk » 2020-01-08 14:50

screen_name="test"
screen -dmS $screen_name

cmd1="cd /mnt/HD/HD_a2/";

echo $cmd1

screen -x -S $screen_name -p 0 -X stuff $cmd1
screen -x -S $screen_name -p 0 -X stuff $'\r'

我想给名为test的screen导入“cd /mnt/HD/HD_a2/”这条命令并回车执行(这个linux版的回车符是\r,\n不执行),遇到的问题是只要$cmd1包含空格就没办法导入进screen不含空格正常,但是我用echo $cmd1是可以打印出包含空格的字符串的。想问下大家有什么办法可以解决
cnxk
帖子: 14
注册时间: 2020-01-08 14:43
系统: Linux version 3.2.40

Re: 关于给screen导入命令的问题

#2

帖子 cnxk » 2020-01-08 16:24

能不能用转义字符来代替“空格”?在这里应该怎么写?
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: 关于给screen导入命令的问题

#3

帖子 astolia » 2020-01-08 18:23

直接用双引号包起来啊

代码: 全选

screen -x -S $screen_name -p 0 -X stuff "$cmd1"
而且可以和回车写在一起

代码: 全选

screen -x -S $screen_name -p 0 -X stuff "$cmd1"$'\r'
cnxk
帖子: 14
注册时间: 2020-01-08 14:43
系统: Linux version 3.2.40

Re: 关于给screen导入命令的问题

#4

帖子 cnxk » 2020-01-09 12:20

谢谢版主的回复,不是双引号的原因,我确定可以将字符串传进screen,但是不能含有空格,有空格就不行,但是下一条/r是可以继续的。我的linux是arm平台的
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: 关于给screen导入命令的问题

#5

帖子 astolia » 2020-01-09 21:02

跟arm平台有什么关系,我在树莓派上的Ubuntu 19.10试了,结果是一样的。
你自己用man screen读一下stuff的说明,stuff后面只有一个参数,所以要用双引号包起来。不用双引号的话,以你上面的例子,就变成了两个参数,在我这里会报如下错误
-X: stuff: invalid option cd
如果你的系统上表现不一致,可能是screen的版本不同,要么是你用的shell有问题。我这里screen版本是4.07.00 (GNU) 02-Oct-19,shell是bash 5.0.x
cnxk
帖子: 14
注册时间: 2020-01-08 14:43
系统: Linux version 3.2.40

Re: 关于给screen导入命令的问题

#6

帖子 cnxk » 2020-01-10 14:47

非常感版本还在跟进这个问题,双引号的方式我也有试过的。另外我的screen版本是4.00.03 (FAU) 23-Oct-06 shell是 4.3.29(1)-release (arm-none-linux-gnueabi)另外这个linunx把man命令精简了。
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: 关于给screen导入命令的问题

#7

帖子 astolia » 2020-01-10 15:28

显然就是个旧版本的bug,你拿新版本源码编译了放到你系统上去试试
回复