分页: 1 / 2

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

发表于 : 2007-06-04 18:44
victo
刚学shell, 如何实现单击任意键退出啊?

有什么命令可以实现吗

???

发表于 : 2007-06-04 18:50
iblicf
read abc

发表于 : 2007-06-04 20:57
victo
iblicf 写了:read abc
read abc

是敲了回车,就退出

击其他键,不会退出啊???
有没有其他大方法呢??

发表于 : 2007-06-05 15:15
iblicf
我靠 你不会判断 abc = 回车啊

发表于 : 2007-06-05 16:10
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

发表于 : 2007-06-05 16:52
stufever
iblicf 写了:我靠 你不会判断 abc = 回车啊
恩,楼主需要的是任意键,而不是回车!

发表于 : 2007-06-05 17:39
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

发表于 : 2007-06-05 18:47
wkt
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需要命令!
没有就安装/自己写!

发表于 : 2007-06-05 19:45
iblicf
日,,read -n 1 行了吧,非要编程序 :)

发表于 : 2007-06-05 19:52
bones7456
为这个编译程序也太小题大做了点,呵呵.

发表于 : 2007-06-05 20:28
stufever
iblicf 写了:日,,read -n 1 行了吧,非要编程序 :)
呵呵,这个“日”可以省掉。

代码: 全选

#/bin/bash

echo "please input a char to exit"
stty -echo
read -n 1 a 
stty echo
exit 0
我想这个应该可以解决楼主的问题了:)

发表于 : 2007-06-05 21:14
wkt
bones7456 写了:为这个编译程序也太小题大做了点,呵呵.
利用现有的东西我不知道!!
而网上有人给出了mygetch
你说哪个容易?
一个你不知道,一个就在眼前.
当然mygetch了!

发表于 : 2007-06-05 21:17
bones7456
wkt 写了:
bones7456 写了:为这个编译程序也太小题大做了点,呵呵.
利用现有的东西我不知道!!
而网上有人给出了mygetch
你说哪个容易?
一个你不知道,一个就在眼前.
当然mygetch了!
呵呵,你的情况比较特殊了.

发表于 : 2007-06-05 21:57
wkt
bones7456 写了:
wkt 写了:
bones7456 写了:为这个编译程序也太小题大做了点,呵呵.
利用现有的东西我不知道!!
而网上有人给出了mygetch
你说哪个容易?
一个你不知道,一个就在眼前.
当然mygetch了!
呵呵,你的情况比较特殊了.
现在,我不特殊了!
有了个待测的方法?

发表于 : 2007-06-07 10:09
victo
好多高手~~~~
赞一个~

我都被感动了~