1. 提示符生成器
2. 自定义命令补全
3. 历史补全
4. 更近的历史记录
5. 找不到命令
6. history
7. 彩色的man
8. 有关LESS_TERMCAP_ *变量的文档?
	8.1 Terminfo和Termcap(详细信息)
9. 更多有用的.bashrc命令

 

本文介绍笔者认为有必要的bash基本设置。

https://wiki.archlinux.org/index.php/Bash

1. 提示符生成器

PS1生成器-使用拖放界面生成.bashrc / PS1 bash提示

http://bashrcgenerator.com/
比如: 方括号时间,路径,换行,上一条命令的返回码,标准提示符,空格
PS1="[\A]\w\n\$?\\$ \[$(tput sgr0)\]"
下面是彩色版本:
PS1="[\[$(tput sgr0)\]\[$(tput bold)\]\[\033[38;5;208m\]\A\[$(tput sgr0)\]]\[$(tput sgr0)\]\[\033[38;5;81m\]\w\[$(tput sgr0)\]\n\$?\\$ \[$(tput sgr0)\]"

返回码放到时间后面:
PS1="[\[$(tput sgr0)\]\[$(tput bold)\]\[\033[38;5;202m\]\A\[$(tput sgr0)\]]\[$(tput sgr0)\]\[\033[38;5;205m\]\$?\[$(tput sgr0)\] \[$(tput sgr0)\]\[\033[38;5;87m\]\w\[$(tput sgr0)\]\n\\$ \[$(tput sgr0)\]"

2. 自定义命令补全

注意: 使用 complete 功能可能与 bash-completion 冲突。
通常来讲,Bash 中按下 tab 只会补全命令后的文件名。通过complete -c命令,Bash 可以规定某些命令后的补全形式为命令,比如:
或通过-cf命令,规定补全形式为命令和文件,比如:
complete -cf sudo

3. 历史补全

您可以绑定上下键来在 Bash 的历史中查找(请参考 Readline (简体中文)#历史 and Readline 启动文件语法):
~/.bash
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
或者所有 Readline 程序:
~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward

4. 更近的历史记录

HISTCONTROL变量可以避免历史记录记录特定的命令,比如不记录重复的命令

~/.bashrc
export HISTCONTROL=ignoredups

HISTCONTROL,和 HISTIGNORE 类似,也是用来忽略某些历史记录。
HISTCONTROL=ignoredups:忽略连续重复的命令
HISTCONTROL=ignorespace:忽略以空白字符开头的命令
HISTCONTROL=ignoreboth:同时忽略以上两种
HISTCONTROL=erasedups:忽略所有历史命令中的重复命令

5. 找不到命令

pkgfile 提供了一个"找不到命令"的钩子,可以在输入未知命令后自动查找官方的软件包。
你需要加载这个钩子来启用它,如下:
~/.bashrc
source /usr/share/doc/pkgfile/command-not-found.bash

6. history

export HISTFILESIZE=20000
export HISTSIZE=10000

$ echo $HISTFILE
/home/tom/.bash_history
注: 可以直接修改这个文件,改变历史记录
$ echo $HISTFILESIZE
20000
$ echo $HISTSIZE
10000

7. 彩色的man

export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0)
export LESS_TERMCAP_mr=$(tput rev)
export LESS_TERMCAP_mh=$(tput dim)
export LESS_TERMCAP_ZN=$(tput ssubm)
export LESS_TERMCAP_ZV=$(tput rsubm)
export LESS_TERMCAP_ZO=$(tput ssupm)
export LESS_TERMCAP_ZW=$(tput rsupm)
export GROFF_NO_SGR=1         # For Konsole and Gnome-terminal

一些简称对照,更多可参阅 $ man terminfo

termcap	terminfo	des…	cn
ks	smkx	make the keypad send commands	使键盘发送命令
ke	rmkx	make the keypad send digits	使键盘发送数字
vb	flash	emit visual bell		发出视觉铃声
mb	blink	start blink			开始闪烁
md	bold	start bold			开始粗体
me	sgr0	turn off bold, blink and underline	关闭粗体,闪烁和下划线
so	smso	start standout (reverse video)	开始突出(反向视频)
se	rmso	stop standout			停止突出
us	smul	start underline			开始下划线
ue	rmul	stop underline			停止下划线

8. 有关LESS_TERMCAP_ *变量的文档?

https://unix.stackexchange.com/questions/108699/documentation-on-less-termcap-variables
翻译: https://qastack.cn/unix/108699/documentation-on-less-termcap-variables
https://unix.stackexchange.com/questions/119/colors-in-man-pages/147#147

8.1 Terminfo和Termcap(详细信息)

https://tldp.org/HOWTO/Text-Terminal-HOWTO-16.html
Terminfo(以前的Termcap)是一个包含终端功能及更多功能的数据库。对于终端的每个(几乎)模型,它告诉应用程序终端能够做什么。它会告诉发送到终端的哪些转义序列(或控制字符),以执行诸如将光标移至新位置,擦除屏幕的一部分,滚动屏幕,更改模式,更改外观(颜色,亮度,闪烁,下划线,倒转视频等)。大约在1980年以后,许多终端都支持一百多种不同的命令(其中一些带有数字参数)。

terminfo缩写通常比termcap的缩写长,因此更容易猜测它们的含义。terminfo的手册页更加详细(并包括旧的termcap缩写)。而且,termcap条目具有对terminfo不存在的大小限制。因此,除非您已经致力于使用termcap,否则建议您使用terminfo。

要查看您现在正在使用的终端(包括PC监视器)的数据库显示,请键入“ infocmp”,并且您应该看到它的源terminfo“文件”。
$ infocmp

 1 $ infocmp
 2 #    Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
 3 xterm-256color|xterm with 256 colors,
 4     am, bce, ccc, km, mc5i, mir, msgr, npc, xenl,
 5     colors#0x100, cols#80, it#8, lines#24, pairs#0x10000,
 6     acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
 7     bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
 8     clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
 9     csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
10     cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
11     cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
12     cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
13     dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
14     el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
15     hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
16     il=\E[%p1%dL, il1=\E[L, ind=\n, indn=\E[%p1%dS,
17     initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
18     invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~,
19     kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D,
20     kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, ka1=\EOw,
21     ka3=\EOy, kb2=\EOu, kbs=^H, kc1=\EOq, kc3=\EOs, kcbt=\E[Z,
22     kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
23     kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
24     kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,
25     kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
26     kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
27     kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
28     kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
29     kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
30     kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
31     kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,
32     kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
33     kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
34     kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
35     kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
36     kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
37     kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
38     kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
39     kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
40     kf8=\E[19~, kf9=\E[20~, khome=\EOH, kich1=\E[2~,
41     kind=\E[1;2B, kmous=\E[<, knp=\E[6~, kpp=\E[5~,
42     kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El,
43     memu=\Em, mgc=\E[?69l, oc=\E]104\007, op=\E[39;49m, rc=\E8,
44     rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
45     rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l,
46     rmcup=\E[?1049l\E[23;0;0t, rmir=\E[4l, rmkx=\E[?1l\E>,
47     rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m,
48     rs1=\Ec\E]104\007, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
49     setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
50     setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
51     sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
52     sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h,
53     smcup=\E[?1049h\E[22;0;0t,
54     smglr=\E[?69h\E[%i%p1%d;%p2%ds, smir=\E[4h,
55     smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m,
56     tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
57     u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,
View Code

 

https://en.wikipedia.org/wiki/Termcap
https://en.wikipedia.org/wiki/Terminfo
Terminfo是一个库和数据库,可让程序以独立于设备的方式使用显示终端。
terminfo数据库可以描述数百个不同显示终端的功能。这使外部程序能够具有基于字符的显示输出,而与终端的类型无关。一些配置是:

  • 屏幕上的行数
  • 单声道模式 抑制颜色
  • 使用可见的铃铛代替蜂鸣声

Terminfo数据库由一个或多个终端描述组成。

 

https://wiki.archlinux.org/index.php/Readline#Editing_mode
Readline是GNU Project的库,Bash和其他CLI界面程序使用它来编辑命令行并与之交互。有关更多信息,请参见readline(3)。

9. 更多有用的.bashrc命令

https://serverfault.com/questions/3743/what-useful-things-can-one-add-to-ones-bashrc
https://ubuntuforums.org/showthread.php?t=679762