免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2400 | 回复: 8

[桌面系统] 有关screen虚拟终端backspace键的问题! [复制链接]

论坛徽章:
0
发表于 2014-04-18 09:13 |显示全部楼层
用screen命令进入到虚拟终端的时候,发现backspace键(也就是退格键)功能发生了变化,按一下BS键是整行删除,而不是删当前光标前单个字符,在screen里单删必须先按左光标键,然后按delete键才能实现,很麻烦。
请教如何设置键盘BS键使之单删光标前一个字符?

论坛徽章:
9
寅虎
日期:2014-06-03 14:10:05午马
日期:2015-01-08 16:49:52白羊座
日期:2015-01-16 12:58:182015年迎新春徽章
日期:2015-03-04 09:57:092015元宵节徽章
日期:2015-03-06 15:51:33NBA常规赛纪念章
日期:2015-05-04 22:32:03IT运维版块每日发帖之星
日期:2015-08-04 06:20:0015-16赛季CBA联赛之北京
日期:2015-12-14 09:40:0315-16赛季CBA联赛之青岛
日期:2016-07-25 11:23:07
发表于 2014-04-18 10:04 |显示全部楼层
没有测试过……

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2014-04-18 16:06 |显示全部楼层
stty ?

可能需要重新设置一下.

另外, 我有同事常用 screen, 没听说有这个情况.

论坛徽章:
0
发表于 2019-03-18 13:29 |显示全部楼层
本帖最后由 lzzzl 于 2019-03-18 21:45 编辑

我在工作中经常使用screen,而且大多是用在自动化下,也就是各种操作都是用SHELL在无人机交互下完成的。
几年前就遇到这个问题了,解决办法是用Ctrl+BackSapce

这段时间因为返回反复重新开关机,第次都要用脚本自动生成各screen和window,因为流程比较固定,问题终于完全重现了,但遗憾的是仍未找到原因,还得用前面的办法删除。
用这样的办法删除本身也不算麻烦,但麻烦之处在于有时忘了按,辛辛苦苦输入的一整行就没了,这是很让人恼火的。

现在进一步想搞清楚的是,这到底是screen的问题,还是bash的问题。不划分清楚的话,下一步调查的范围就会变大。

另外附上自动创建的脚本,大致分为通用和专用2块。一般专用的定制内容就足够了。
make-sample-screen.sh是一个专用的定制例子,是用于SIPp测试的。如果没有这个软件,后面2个自动创建的window的命令全部请参考前面的改成ls即可。不改问题也不大,只是会出现几句错误而已。窗口还是会自动生成的
这时3个window会全部出现backspace表现不佳的情况

另外此脚本没用最新命令,所以兼容旧版本(4.0.1).以前用了新命令,只能工作于新版本(4.0.3)。

1) 通用
cat _make_screen_common.sh_

function create_screen() {
    local count=$(ps -ef | grep -E "SCREEN.*${ssn}"|grep -v grep|wc -l)
    #echo $count
    if [ $count -eq 1 ]; then
        screen -ls
        echo "There is already a screen named xxx.${ssn}."
        if [ "$1"xx = "-keep"xx ]; then
            return
        fi

        echo "You can keep it with option -keep."
        echo "But we will kill it because there is not -keep option this time."
        screen -r ${ssn} -X quit
    elif [ $count -gt 1 ]; then
        echo "More than one screen named xxx.${ssn} already exist!"
        echo "lease kill or quit the existing one(s) manually."
        return
    fi

    screen -dmS ${ssn} -t bash
    sleep 1
    #the follow commands works in Screen version 4.00.03 (FAU) 23-Oct-06
    #and in newer version, 'screen -t' will be regarded as other commands after stuff and \n work well to avoid multi lines quote string
    #eg. screen -r ${ssn} -p bash -X stuff "screen -t uas\n"

    i=0
    n=${#titles}
    while [ $i -lt $n ]; do
        title=${titles[$i]}
        if [ ! "$title"xx == ""xx ]; then
            screen -r ${ssn} -p bash -X screen -t $title
        fi

        dir=${dirs[$i]}
        if [ ! "$dir"xx == ""xx ]; then
            screen -r ${ssn} -p ${titles[$i]} -X stuff "cd $dir
            "
        fi

        cmd=${cmds[$i]}
        m=${#cmd}
        if [ ! "$cmd"xx == ""xx ]; then
            #decode \n
            m=$(($m-2))
            if [ $m -gt 0 ]; then
                if [ "${cmdm:2}"xx == "\n"xx ]; then
                    cmd="${cmd:0m}
                    "
                fi
            fi
        fi
        #use a simple but safe way to trim(but it seems that the prefix of 13 spaces we see in the command and we want to delete is not the ones we are deleting)
        while [ "${cmd:0:1}"xx == " "xx ]; do
            cmd=${cmd:1m}
        done

        if [ ! "$cmd"xx == ""xx ]; then
            screen -r ${ssn} -p ${titles[$i]} -X stuff "$cmd"
        fi

        i=$(($i + 1))
    done

    screen -ls
        echo "ease use screen -r xxx to enter a screen."
    echo created
}

function show_usage() {
    echo "Usage $0 <screen session name>\n"
    echo "eg. $0 jack"
}

function main() {
    if [ "$1"xx = "xx" ]; then
        show_usage
        exit 1
    fi
    local ssn="$1"

    init_data "$@"
    create_screen "$@"
}

2)专用
cat make-sample-screen.sh

#!/bin/bash
#make-screen.sh
#param $1 screen name

. ./_make_screen_common.sh_

my_dir=~

function init_data(){
    # the length of the titles, dirs and cmds must be the same
    titles=( \
      scenario \
      uas \
      uac \
    )
    dirs=( \
      ${my_dir} \
      ${my_dir} \
      ${my_dir} \
    )
    #only a command ending with \n will be executed, otherwise it will be inputed only for you(a enter key is needed to execute it)
    cmds=( \
      "ls" \
      "sipp -sn uas -p 5061\n" \
      "sipp -sn uac 127.0.0.1:5061\n" \
    )
}

main "$@"



论坛徽章:
0
发表于 2019-03-18 13:30 |显示全部楼层
本帖最后由 lzzzl 于 2019-03-18 13:53 编辑

由于延迟,重复了,无删除功能,直接删除内容啦。

论坛徽章:
0
发表于 2019-03-18 13:32 |显示全部楼层
本帖最后由 lzzzl 于 2019-03-18 13:34 编辑

回复 3# q1208c

我在工作中经常使用screen,而且大多是用在自动化下,也就是各种操作都是用SHELL在无人机交互下完成的。
几年前就遇到这个问题了,解决办法是用Ctrl+BackSapce
这段时间因为要反复重新开关机,第次都要用脚本自动生成各screen和window,正因为每次条件是固定的,终于完全重现问题了,但遗憾的是仍未找到原因,还得用前面的办法删除。
用这样的办法删除本身也不算麻烦,但麻烦之处在于有时忘了按,辛辛苦苦输入的一整行就没了,这是很让人恼火的。
现在进一步想搞清楚的是,这到底是screen的问题,还是bash的问题。不划分清楚的话,下一步调查的范围就会变大。
另外附上自动创建的脚本,大致分为通用和专用2块。一般专用的定制内容就足够了。
make-sample-screen.sh是一个专用的定制例子,是用于SIPp测试的。如果没有这个软件,后面2个自动创建的window的命令全部请参考前面的改成ls即可。不改问题也不大,只是会出现几句错误而已。窗口还是会自动生成的
这时3个window会全部出现backspace表现不佳的情况
另外此脚本没用最新命令,所以兼容旧版本(4.0.1).以前用了新命令,只能工作于新版本(4.0.3)。
1) 通用
cat _make_screen_common.sh_


脚本添加后出错了,以后再添加。或有立即需要的请直接发邮件给我(lzzzl@163.com)

2)专用
cat make-sample-screen.sh


脚本添加后出错了,以后再添加。或有立即需要的请直接发邮件给我(lzzzl@163.com)


论坛徽章:
0
发表于 2019-03-18 13:51 |显示全部楼层
考虑到附件问题容易出错,放GitHub了
https://github.com/joeonly/makescreen

论坛徽章:
0
发表于 2019-03-18 13:51 |显示全部楼层
本帖最后由 lzzzl 于 2019-03-20 11:51 编辑

回复 6# lzzzl

回贴显示延迟导致的重复内容已删除

论坛徽章:
0
发表于 2019-03-18 21:42 |显示全部楼层
本帖最后由 lzzzl 于 2019-03-20 11:51 编辑

回复 6# lzzzl

回贴显示延迟导致的重复内容已删除
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:help@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP