1、bind


在shell中,内建(builtin)命令bind,格式如下:


    bind [-m keymap] [-lpsvPSVX]

    bind [-m keymap] [-q function] [-u function] [-r keyseq]

    bind [-m keymap] -f filename

    bind [-m keymap] -x keyseq:shell-command

    bind [-m keymap] keyseq:function-name

    bind readline-command



bind命令用于显示当前“readline”中键和function的绑定,绑定键序列与function或宏,设置“readline”变量。每个非选项参数都是一个命令,好像来自特殊文件“.inputrc”一样。所有的绑定和命令都必须作为一个单独的参数,例如’”\C-x\C-r”: re-read-init-file’。


bind命令中各选项的作用:


“-m keymap”:用参数keymap作为后续绑定的键映射,参数可以是emacs、emacs-standard、emacs-meta、emacs-ctlx、vi、vi-move、vi-command、vi-insert,其中vi和vi-command相同,emacs和emacs-standard相同。

“-l”:列出所有的“readline”的function名称。

“-p”:以可以作为重新输入的格式显示“readline”的function名称和绑定。

“-P”:列出当前“readline”的function名称和绑定。

“-s”:以可以作为重新输入的格式显示“readline”绑定到宏的键序列和输出的字符串。

“-S”:显示“readline”绑定到宏的键序列和输出的字符串。

“-v”:以可以作为重新输入的格式显示“readline”变量名和值。

“-V”:显示当前“readline”变量名和值。

“-f filename”:从文件filename中读取键绑定。

“-q function”:查询与function绑定的键。

“-u function”:解除所有与function绑定的键。

“-r keyseq”:删除当前所有的与键序列keyseq的绑定。

“-x keyseq:shell-command”:每次获取键序列keyseq时都执行shell命令shell-command。执行shell命令时,变量READLINE_LINE保存“readline”缓冲的内容,变量READLINE_POINT保存当前插入点的位置,如果这两个变量被修改,新的变量值会在编辑状态中出现。

“-X”:以可以作为重新输入的格式显示所有的绑定到shell命令的键序列。

例如,对于shell命令uname,把它绑定到按键“u”上。


$ bind -x '"u": uname'


  shell 命令之bind,enable,ulimit_字符串


当在shell终端按下“u”键时就会直接执行uname命令。



2、enable


在shell中,内建(builtin)命令enable,格式如下:


    enable [-a] [-dnps] [-f filename] [name ...]


enable命令用于启用或禁用shell内建命令。在执行shell命令时,先查找是否属于内建命令,然后才在环境变量PATH中查找,如果使用enable禁用了这个命令,那么PATH中的同名命令就会执行。选项“-n”用于禁用命令,不使用时则启用命令。在支持动态加载的系统上,选项“-f”设置从动态库filename中加载新的内建命令,“-d”则用来删除加载的这些命令。如果不指定命令name或者只是使用了选项“-p”时,则输出当前启用的内建命令。选项“-a”显示所有的内建命令,包括启用的和禁止的命令。选项“-s”仅输出POSIX内建命令。


先来看一下特殊的POSIX内建命令:

      shell 命令之bind,enable,ulimit_shell_02


提示:POSIX特殊命令是什么?由于历史原因,POSIX标准把几个内建命令归类为特殊命令。当Bash在POSIX模式下运行时,这些特殊的内建命令与普通的内建命令有几点不同:特殊命令先于shell函数被搜索,特殊命令返回false时如果是非交互运行的shell就会退出,命令前面的赋值语句在命令结束后仍对shell环境有效。


禁用内建命令exit:

shell 命令之bind,enable,ulimit_emacs_03



3、ulimit


在shell中,内建(builtin)命令ulimit,格式如下:


    ulimit [-HSTabcdefilmnpqrstuvx [limit]]



如果系统支持,ulimit命令能够控制shell中的有效资源。选项“-H”、“-S”分别指硬限制、软限制,硬限制设置好之后不能由非root用户来增加其值,软限制则可能增加到硬限制的值,这两个选项都不指定时会同时设置它们的值。参数limit可以为数字,也可以是三个特殊的字符串,hard、soft和unlimited,不设置limit时显示当前软限制值,此时除非设置了“-H”才显示硬限制值。


下面是ulimit命令其它选项的含义。


  “-a”:显示当前所有的限制。

  “-b”:套接字socket缓冲的最大长度。

  “-c”:可创建的core文件的最大个数。

  “-d”:一个进程的数据段的最大长度。

  “-e”:调度优先级即nice的最大值。

  “-f”:shell及其子进程写文件时的最大长度。

  “-i”:等待的信号的最大个数。

  “-l”:锁在内存中最大长度。

  “-m”:常驻内存的最大值(许多系统不支持这个限制)。

  “-n”:打开的文件描述符的最大个数(许多系统禁止设置这个限制)。

  “-p”:块block大小为512字节的管道长度。

  “-q”:POSIX消息队列的最大字节数。

  “-r”:实时调度的最大优先级。

  “-s”:堆栈stack的最大长度。

  “-t”:累计CPU时间(秒)的最大值。

  “-u”:单个用户可以拥有的进程的最大个数。

  “-v”:shell可用的虚拟内存的最大值。

  “-x”:文件锁的最大个数。

  “-T”:最大线程数。


ulimit命令中,如果设置了参数limit,且没有使用选项“-a”,指定的资源便会设置为这个新的limit值。如果不使用任何选项的话,默认使用“-f”。选项“-t”增值的单位为秒,“-p”增值的单位为块block即512字节,“-T”、“-b”、“-N”、“-u”则没有这种特殊的增长幅度,剩余其它选项的增值单位为1024各字节。


系统默认的ulimit值:

    shell 命令之bind,enable,ulimit_字符串_04