【Bash百宝箱】shell内建命令之bind、enable、ulimit

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终端按下“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内建命令:

$ enable -s
enable .
enable :
enable break
enable continue
enable eval
enable exec
enable exit
enable export
enable readonly
enable return
enable set
enable shift
enable source
enable times
enable trap
enable unset

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

禁用内建命令exit:

$ enable -n exit
$ exit
No command 'exit' found, did you mean:
 Command 'edit' from package 'mime-support' (main)
 Command 'exif' from package 'exif' (universe)
 Command 'exim' from package 'exim4-daemon-heavy' (main)
 Command 'exim' from package 'exim4-daemon-light' (main)
exit: command not found
$ enable -n
enable -n exit

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值:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62752
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 62752
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值