shell 中 read 退格问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lanyang123456/article/details/52263608

问题描述:
read读取数据,误输入,需要删除时,backspace 却无法删除,反而出现字符^H。
例如:输入defef,接着按backspace尝试删除,结果:

defef^H^H

解决办法:
在read之前,添加如下命令,重新定义erase:

stty erase ^H

注意:
如果在使用read时,使用-n选项 ,则上述解决办法无效。

展开阅读全文

shell请教read,wait控制多线程问题

06-12

网上有一个多线程代码,可是我运行了下,为什么程序结束不了哦,感觉是在waitrn代码如下:rnrn感觉是在read - u6 rn这句停住了,这是为什么呢,请教!rnrnrn #!/bin/bashrn # 2006-7-12, by wwyrn #———————————————————————————–rn # 此例子说明了一种用wait、read命令模拟多线程的一种技巧rn # 此技巧往往用于多主机检查,比如ssh登录、ping等等这种单进程比较慢而不耗费cpu的情况rn # 还说明了多线程的控制rn #———————————————————————————– rn rnrn function a_sub # 此处定义一个函数,作为一个线程(子进程) rn sleep 3 # 线程的作用是sleep 3s rn rnrnrn tmp_fifofile = " /tmp/$$.fifo " rn mkfifo $tmp_fifofile # 新建一个fifo类型的文件 rn exec 6 <> $tmp_fifofile # 将fd6指向fifo类型 rn rm $tmp_fifofile rnrnrn thread = 15 # 此处定义线程数 rn for ((i = 0 ;i < $thread ;i ++ )); do rn echorn done >& 6 # 事实上就是在fd6中放置了$thread个回车符 rn rnrn for ((i = 0 ;i < 50 ;i ++ )); do # 50次循环,可以理解为50个主机,或其他 rn rn read - u6 rn # 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,rn # fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制 rn rn # 此处子进程开始执行,被放到后台 rn a_sub && # 此处可以用来判断子进程的逻辑 rn echo " a_sub is finished " rn || rn echo " sub error " rn rn echo >& 6 # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个 rn & rnrn donernrn wait # 等待所有的后台子进程结束 rn exec 6 >&- # 关闭df6 rn rnrn exit 0 论坛

没有更多推荐了,返回首页