我个人使用的Bash功能介绍
本文是MicroAd Advent Calendar 2021的第13篇文章。
总结
在这篇文章中,我会介绍一些我个人认为在Bash中可用的Shell功能中最基本必需的内容。关于它们是否必要或者是否方便都是作者的主观观点,希望您能参考一下。
使命历史更方便使用
关于Shell执行历史记录的设置有以下几种选择:
-
- メモリに保存する履歴数(HISTSIZE)
-
- ファイルに保存する履歴数(HISTFILESIZE)
-
- 履歴のフォーマット(HISTTIMEFORMAT)
- 履歴に残さないコマンド(HISTIGNORE)
这些可以通过环境变量进行设置。
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
export HISTIGNORE=$'&:ls:ll:la:ps:top:df:du'
HISTIGNORE 用于在历史记录中排除想要忽略的内容,请用冒号分隔。符号 & 表示重复的命令。其他命令只用于显示而不会对文件进行更改。
更改保存记录的时机
可以通过设置环境变量PROMPT_COMMAND,在显示新提示之前执行特定的命令。通过如下设置可以记录每次命令执行的历史记录。通过这个设置,可以在多个终端之间共享历史记录,同时也可以防止在终端异常结束时丢失历史记录。
export PROMPT_COMMAND="history -a; history -c; history -r"
shopt -u histappend
由于输入选项时出现了拼写错误,所以进行了更新。
不再使用 export PROMPT_COMMAND=”history -a; history -r; history -r”,
而是使用 export PROMPT_COMMAND=”history -a; history -c; history -r”。
将”確認系”的选项设置为默认设置。
这是关于确认删除(-i)和确认执行内容(-v)的设置。
为了以防万一,我加上了这个选项,因为如果操作错误,文件的内容会被删除。
alias rm='rm -iv'
alias cp='cp -iv'
alias mv='mv -iv'
alias ln='ln -iv'
将Ctrl+W键设定为以斜杠分隔后进行删除的功能。
在Shell环境下,通过按下Ctrl键+w键可以删除单词。但是,由于单词是以空格分隔的,所以像文件路径这样用斜杠分隔的字符串将被全部删除。
因此,在.bashrc或其他配置文件中设置如下设置。
stty werase undef
bind '"\C-w": unix-filename-rubout'
当按下Ctrl+w时,例如在输入/etc/nginx/nginx.conf的状态下,它会变成/etc/nginx/。
顺便提一句,对于zsh而言,你可以通过环境变量WORDCHARS来指定被用作单词的字符集,因此你可以通过自行定义不包含斜杠的这个变量来实现。
WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
即使使用sudo,也可以使用别名。
在用户设置中添加的别名,在执行sudo命令时不会被展开,因此无法使用。
可以通过设置sudo <空格> 别名来解决这个问题。
这样,在设置了alias ls=ls -l的情况下,就可以像sudo ll这样使用了。
alias sudo='sudo '
这是Bash的规定,如果别名的最后一个字符是空格,那么接下来的命令也会被检查是否是别名。
Git命令的别名
虽然这不是关于Shell别名的问题,而是关于Git命令别名,但顺便提一下。
可以通过对Git的配置文件进行编写或使用git config命令进行设置。设置的影响范围分为系统级别(/etc/gitconfig)和用户级别(~/.gitconfig),这取决于config命令中的–global选项。
比如,如果用以下命令进行设置,输入git s就等同于输入git status。
git config --global alias.s status
我在设置中添加了以下内容:较多的类型和较多的选项将会使使用更加方便。
git config --global alias.s status
git config --global alias.st status -uno
git config --global alias.a add
git config --global alias.b branch
git config --global alias.cm commit
git config --global alias.b branch -a
git config --global alias.c checkout
git config --global alias.dn diff --name-only
git config --global alias.dw diff --word-diff
git config --global alias.g "log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'"
git config --global alias.l "log --graph --all --decorate"
总结
在本文中,我介绍了我个人认为在Shell中非常方便的功能。由于设置选项因人而异,所以不能一概而论哪个好,但如果能成为提高工作效率的契机,那将是令人高兴的。
这次我本来是打算用Kafka写一个像上次那样的构建系统的文章,但是上次花的时间比我想象的要长,所以改变了计划。另外,我以前一直想整理业务用的Shell环境,但是一直没有花时间,这次正好有个好机会。
如果给我8个小时砍木头的时间,我会用其中的6个小时来磨斧头。
正如有这样一句话一样,首先我们要重视提高工作效率所需的工作环境建设。