免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2692 | 回复: 10
打印 上一主题 下一主题

请帮忙看几句脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-09 09:46 |只看该作者 |倒序浏览
请各位高手解释一下下面各句脚本的作用和用法。

apps_pwd()
{
echo  "Enter APPS password:"                 --提示输入密码
stty_orig=`stty -g`                                  --将当前输入设备的设置保存起来
trap "stty ${stty_orig}; exit" 1 2 3 15     --不懂
stty -echo >&- 2>&-                                 --设置禁止回显,保护密码。但不知道">&- 2>&-"做什么用
read APPS_PWD                                       --读入密码
stty ${stty_orig} >&- 2>&-                      --恢复输入设备原先的设置
trap 1 2 3 15                                            --不懂
}

谢谢!

[ 本帖最后由 zhyuh 于 2009-1-9 09:47 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-01-09 10:01 |只看该作者
原帖由 zhyuh 于 2009-1-9 09:46 发表
请各位高手解释一下下面各句脚本的作用和用法。

apps_pwd()
{
echo  "Enter APPS password:"                 --提示输入密码
stty_orig=`stty -g`                                  --将当前输入设备的 ...



>&- 2>&-     表示关闭正确和错误输出
其他的man trap吧

论坛徽章:
0
3 [报告]
发表于 2009-01-09 10:25 |只看该作者
trap "stty ${stty_orig}; exit" 1 2 3 15

这个的意思就是说shell在执行的时候捕捉(说屏蔽不太准确)信号量 1 2 3 15,shell在执行完毕退出的之前恢复原来stty的设置
1 SIGHUP 终止进程 终端断开
2 SIGINT 终止进程 按ctrl+c
3 SIGQUIT 终止进程 按 ctrl+\或者ctrl+D
9 SIGKILL 终止进程 无法捕获或忽略
15 SIGTERM 终止进程 软件终止信号
20 SIGTSTP 终止进程 终端来的停止信号

[ 本帖最后由 zhanglipeng 于 2009-1-9 13:52 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-01-09 11:44 |只看该作者
是不是说在执行两句trap之间的脚本时,屏蔽信号量 1 2 3 15? 谢谢!

trap "stty ${stty_orig}; exit" 1 2 3 15   
        --stty -echo >&- 2>&-                       
        --read APPS_PWD                             
        --stty ${stty_orig} >&- 2>&-               
trap 1 2 3 15

论坛徽章:
0
5 [报告]
发表于 2009-01-09 13:36 |只看该作者
说屏蔽不准确,准确说就是捕捉,就是你按下ctrl+c后,2这个信号量被trap了,就认为是被捕捉了吧,因此在执行信号2这个中断前,先执行“stty ${stty_orig};exit”

屏蔽这些信号量是这样的:

#!/bin/bash


trap "" 1 2 3 15

i=1
while :

do
    echo ((i++))
done


其实说白了也是捕捉信号,只不过捕捉到了什么都不做,就相当于屏蔽了

还有如果不想让密码显示:read -s passwd
没有必要关闭回显

[ 本帖最后由 zhanglipeng 于 2009-1-9 14:00 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-01-09 14:23 |只看该作者
原帖由 zhanglipeng 于 2009-1-9 13:36 发表
说屏蔽不准确,准确说就是捕捉,就是你按下ctrl+c后,2这个信号量被trap了,就认为是被捕捉了吧,因此在执行信号2这个中断前,先执行“stty ${stty_orig};exit”

屏蔽这些信号量是这样的:

#!/bin/bash
...


说的非常对。

论坛徽章:
0
7 [报告]
发表于 2009-01-09 16:50 |只看该作者
谢谢各位,谢谢 zhanglipeng!

再请教一个相关问题。一般来说执行 stty -echo 以后,运行中输入密码的时候都不会在屏幕上显示出来,但是有几次运行的时候,我们输入的密码却显示在了屏幕上。不知道哪些可能的原因会导致这种情况。谢谢!

论坛徽章:
0
8 [报告]
发表于 2009-01-09 18:14 |只看该作者
那你在你的脚本里还有没有其他的设置回显的代码呢?

论坛徽章:
0
9 [报告]
发表于 2009-01-09 21:42 |只看该作者
trap是用来捕捉信号用的。

论坛徽章:
0
10 [报告]
发表于 2009-01-09 21:43 |只看该作者

回复 #5 zhanglipeng 的帖子

read -s 这个好用,学习了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP