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,
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