LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: johnny_jiang

[求助]终端和Shell的关系?

[复制链接]
发表于 2006-2-24 13:56:17 | 显示全部楼层
对,就是这个意思,那么如果C-j和RETURN都被重新定义了怎么办。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 13:58:52 | 显示全部楼层
Post by seamonkey
我是说在Readline中, C-c或C-z等被stty或终端驱动指派的signal发生字符,并不能被重新指派,是这样吧。


seamonkey的意思就是说readline中是不能指派哪个按键产生signal,对吗?:ask

如果是这样,我觉得终端就是接收我们的每一次键盘的输入,然后在交给shell,利用readline对其进行处理,right?
readline和终端都能对按键进行定义,只不过从不同的层面.请两位高手点评:thank

终端是不是可以实现,我如果按'J',显示的却是'K'?或者说,readline也可以做到?

希望两位不要介意我麻烦,小弟有点模糊,对概念我比较重视.
回复 支持 反对

使用道具 举报

发表于 2006-2-24 17:51:16 | 显示全部楼层
readline中是不能指派哪个按键产生signal

我想是的。


[QUOTE]如果是这样,我觉得终端就是接收我们的每一次键盘的输入,然后在交给shell,利用readline对其进行处理,right?[/QUOTE]

不是,readline只是命令行编辑,起的是增强shell功能的作用,你可以加上--noediting参数启动bash,禁用readline,只是少了一些功能——这倒是回答了你前面问的tab补全,命令历史都是由shell哪个部件提供的。

但它不是bash的核心部分,解释命令不是由它完成的。

至于按'J',显示的却是'K'?或者说,readline也可以做到,这是可以做到的,在~/.inputrc加入
J: "K"
就可以了,但是只对支持readline的程序起作用,而且readline的本意不是这样用的吧,你这样做的目的又是何在呢?

在console下,可以通过loadkeys载入不同的键盘映射表keymaps,xterm可以通过~/.Xdefault自定义键的映射。TERM变量也会影响到键盘映射。

我不是高手,我也糊涂的很,yongjian是。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 19:15:37 | 显示全部楼层
Normally, a terminal works in the canonical mode. When a user hits a key, the resulting character does not immediately go to the program actually running in this terminal. A buffer local to the terminal stores keystrokes. When the user hits the ENTER key, this sends all the stored keystrokes to the program running. There is even a basic line editor inside the terminal.

上面这段是在abs中摘取的,其实我上面的想法,只是想证明terminal或者readline是否支持键盘映射,并没有其他的目的
按照abs中的说法,我感觉不就是terminal接收了你的keystrokes,等待命令结束符的出现,就把你的输入内容传给当前running的程序,而且terminal中本身就有一个基本的命令行编辑器,所以shell所支持的readline就是对命令行编辑的增强。

那如果象前面yongjian兄所说把intr信号重新定义为C-r,而C-r在readline的支持下不是历史命令的搜索吗,将会有什么样的情况呢?
而且在我们C-r的情况下,shell就进入了历史命令的模式,并没有命令结束符啊。

终端是不是也可以认为是一个running的后台程序啊?糊涂啊:ask

自己感觉基础概念好差啊
回复 支持 反对

使用道具 举报

发表于 2006-2-24 19:29:29 | 显示全部楼层
stty intr ^R

ctrl r就成了发送interrupt signal了,而不是搜索历史了。

你的^R是如何输入的。

应该是先输入ctrl+v, 然后输入ctrl+r。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 20:06:17 | 显示全部楼层
Post by seamonkey
stty intr ^R

ctrl r就成了发送interrupt signal了,而不是搜索历史了。

你的^R是如何输入的。

应该是先输入ctrl+v, 然后输入ctrl+r。


哦,那就是说终端还是第一道关卡。我想问一下mingetty是不是产生虚拟终端的程序啊
回复 支持 反对

使用道具 举报

发表于 2006-2-24 20:16:41 | 显示全部楼层
不是,getty, agetty或mingetty是打开一个tty端口,调用login程序,等待终端连接登录。差不多就是这个意思。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 22:43:23 | 显示全部楼层
Post by seamonkey
终端最早指硬件设备,一般通过串行线连接到主机,向主机系统输入数据,显示由主机系统返回的数据。典型的有DEC公司的VT100,随着个人电脑的普及,这类设备很少见了。请见:

http://www.cs.utk.edu/~shuford/terminal/dec.html

现在说的终端,则是软件对传统硬件终端的仿真,所以称为Terminal Emulator。如rxvt是对vt100的模拟。
shell是操作系统中用户和内核交互的层面,既有基于命令行的如bash,csh,也有图形界面的如windows explorer。
终端是用户访问命令行界面(包括基于命令行界面的shell)的途径。
readline是gnu开发的软件库,提供了命令行编辑的能力,如光标在行内快速定位,命令历史搜索等。
tab补全是shell提供的,如何实现不知道。


其实终端从硬件上,我还是能够理解的,那么如seamonkey所说,现在我们所谓的在linux中使用的终端都是软件虚拟的,我们在字符命令行状态下操作时,其实是在仿真的终端里进行操作?如果是的话,又是如何仿真模拟出来的呢。

象设备文件/dev/console和/dev/tty和他们之间有什么联系呢?
回复 支持 反对

使用道具 举报

发表于 2006-2-25 01:02:38 | 显示全部楼层
Post by johnny_jiang
Normally, a terminal works in the canonical mode. When a user hits a key, the resulting character does not immediately go to the program actually running in this terminal. A buffer local to the terminal stores keystrokes. When the user hits the ENTER key, this sends all the stored keystrokes to the program running. There is even a basic line editor inside the terminal.

上面这段是在abs中摘取的,其实我上面的想法,只是想证明terminal或者readline是否支持键盘映射,并没有其他的目的
按照abs中的说法,我感觉不就是terminal接收了你的keystrokes,等待命令结束符的出现,就把你的输入内容传给当前running的程序,而且terminal中本身就有一个基本的命令行编辑器,所以shell所支持的readline就是对命令行编辑的增强。

那如果象前面yongjian兄所说把intr信号重新定义为C-r,而C-r在readline的支持下不是历史命令的搜索吗,将会有什么样的情况呢?
而且在我们C-r的情况下,shell就进入了历史命令的模式,并没有命令结束符啊。

终端是不是也可以认为是一个running的后台程序啊?糊涂啊:ask

自己感觉基础概念好差啊

终端不是程序。是一个char device.你可以看看
  1. ls -la /dev/console or ls -la /dev/tty*
复制代码
的属性,都是c开头的。通常文件描述符都链接到这些终端设备上从而可以接收输入输出。
回复 支持 反对

使用道具 举报

发表于 2006-2-25 01:08:14 | 显示全部楼层
Post by johnny_jiang
其实终端从硬件上,我还是能够理解的,那么如seamonkey所说,现在我们所谓的在linux中使用的终端都是软件虚拟的,我们在字符命令行状态下操作时,其实是在仿真的终端里进行操作?如果是的话,又是如何仿真模拟出来的呢。

象设备文件/dev/console和/dev/tty和他们之间有什么联系呢?

虚拟终端是内核产生的。都是硬件终端下的虚拟子设备。console的manpage上写了可以最多模拟出63个。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表