[讨论]在shell里面,如何实现单击任意键退出

sh/bash/dash/ksh/zsh等Shell脚本
victo
帖子: 8
注册时间: 2007-05-30 10:38
送出感谢: 0
接收感谢: 0

[讨论]在shell里面,如何实现单击任意键退出

#1

帖子 victo » 2007-06-04 18:44

刚学shell, 如何实现单击任意键退出啊?

有什么命令可以实现吗

???
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#2

帖子 iblicf » 2007-06-04 18:50

read abc
victo
帖子: 8
注册时间: 2007-05-30 10:38
送出感谢: 0
接收感谢: 0

#3

帖子 victo » 2007-06-04 20:57

iblicf 写了:read abc
read abc

是敲了回车,就退出

击其他键,不会退出啊???
有没有其他大方法呢??
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#4

帖子 iblicf » 2007-06-05 15:15

我靠 你不会判断 abc = 回车啊
wkt
帖子: 849
注册时间: 2006-09-07 22:51
送出感谢: 0
接收感谢: 0
联系:

#5

帖子 wkt » 2007-06-05 16:10

写一个:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main()
{
mygetch();
return 0;
}

http://hi.baidu.com/wjq_qust/blog/item/ ... b49cc.html
stufever
帖子: 69
注册时间: 2007-03-11 17:48
送出感谢: 0
接收感谢: 0

#6

帖子 stufever » 2007-06-05 16:52

iblicf 写了:我靠 你不会判断 abc = 回车啊
恩,楼主需要的是任意键,而不是回车!
stufever
帖子: 69
注册时间: 2007-03-11 17:48
送出感谢: 0
接收感谢: 0

#7

帖子 stufever » 2007-06-05 17:39

wkt 写了:写一个:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main()
{
mygetch();
return 0;
}

http://hi.baidu.com/wjq_qust/blog/item/ ... b49cc.html
赞,但是楼主希望的是在shell中实现
恩,有一个stty命令可以控制终端的属性,但是根据LZ的要求应该是TCSANOW,也就是及时更新驱动程序,看了半天man也没找到。其它的倒是用命令很简单就能实现

代码: 全选

stty -icanon -echo
stty icanon echo
wkt
帖子: 849
注册时间: 2006-09-07 22:51
送出感谢: 0
接收感谢: 0
联系:

#8

帖子 wkt » 2007-06-05 18:47

stufever 写了:
wkt 写了:写一个:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main()
{
mygetch();
return 0;
}

http://hi.baidu.com/wjq_qust/blog/item/ ... b49cc.html
赞,但是楼主希望的是在shell中实现
恩,有一个stty命令可以控制终端的属性,但是根据LZ的要求应该是TCSANOW,也就是及时更新驱动程序,看了半天man也没找到。其它的倒是用命令很简单就能实现

代码: 全选

stty -icanon -echo
stty icanon echo
写好,编译后!
不就是shell了吗!
shell需要命令!
没有就安装/自己写!
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#9

帖子 iblicf » 2007-06-05 19:45

日,,read -n 1 行了吧,非要编程序 :)
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

#10

帖子 bones7456 » 2007-06-05 19:52

为这个编译程序也太小题大做了点,呵呵.
关注我的blog: ε==3
stufever
帖子: 69
注册时间: 2007-03-11 17:48
送出感谢: 0
接收感谢: 0

#11

帖子 stufever » 2007-06-05 20:28

iblicf 写了:日,,read -n 1 行了吧,非要编程序 :)
呵呵,这个“日”可以省掉。

代码: 全选

#/bin/bash

echo "please input a char to exit"
stty -echo
read -n 1 a 
stty echo
exit 0
我想这个应该可以解决楼主的问题了:)
wkt
帖子: 849
注册时间: 2006-09-07 22:51
送出感谢: 0
接收感谢: 0
联系:

#12

帖子 wkt » 2007-06-05 21:14

bones7456 写了:为这个编译程序也太小题大做了点,呵呵.
利用现有的东西我不知道!!
而网上有人给出了mygetch
你说哪个容易?
一个你不知道,一个就在眼前.
当然mygetch了!
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

#13

帖子 bones7456 » 2007-06-05 21:17

wkt 写了:
bones7456 写了:为这个编译程序也太小题大做了点,呵呵.
利用现有的东西我不知道!!
而网上有人给出了mygetch
你说哪个容易?
一个你不知道,一个就在眼前.
当然mygetch了!
呵呵,你的情况比较特殊了.
关注我的blog: ε==3
wkt
帖子: 849
注册时间: 2006-09-07 22:51
送出感谢: 0
接收感谢: 0
联系:

#14

帖子 wkt » 2007-06-05 21:57

bones7456 写了:
wkt 写了:
bones7456 写了:为这个编译程序也太小题大做了点,呵呵.
利用现有的东西我不知道!!
而网上有人给出了mygetch
你说哪个容易?
一个你不知道,一个就在眼前.
当然mygetch了!
呵呵,你的情况比较特殊了.
现在,我不特殊了!
有了个待测的方法?
victo
帖子: 8
注册时间: 2007-05-30 10:38
送出感谢: 0
接收感谢: 0

#15

帖子 victo » 2007-06-07 10:09

好多高手~~~~
赞一个~

我都被感动了~
回复

回到 “Shell脚本”