§ 0x01 为什么写这个
Shell是命令行中和Linux交互的主要界面,在日常开发中,和它打的交道也最多。学习shell的过程中,发现了一些有意思的地方。想记录一下,分享给也正在学习shell的同学。这里指一般Linux发行版上自带的Bash Shell。
§ 0x02 alias——为什么rm时一定要提示下我?
# rm 1
rm: remove regular empty file `1'?
许多人不明白。为什么有的环境中rm不提示,有的环境中一下有提示。有的人为了省事,直接加了-f
的参数。其实是环境中的rm被转成了alias。通过alias rm 可以确认。
$ alias rm
rm='rm -i'
§ 0x03 内置函数——为什么cd指令找不到可执行文件?
shell有一些内置函数或者叫指令。这些指令不是由可执行文件提供的。
通过type指令可以查看一个指令是否是内置的。示例如下:
pi@rp:~ $ type ls
ls is aliased to `ls --color=auto'
pi@rp:~ $ type cd
cd is a shell builtin
通过以上可以知道cd是内置的函数,所以没有对应的可执行文件。而ls是一个别名alias。
所有的内置指令可以通过在man bash中搜索SHELL BUILTIN COMMANDS
找到。
§ 0x04 set 指令
set 可以用来打开一些选项。
比较有用的有
set -x # 开启代码回显。方便定位异常点。
set -o pipefail # 开启管道失败。当管道中某个命令失败时,整个管道的退出状态为非0.
§ 0x05 快捷键
ctrl+r # ,可以搜索历史命令
fc # 可以在默认编辑器中编辑上个命令,如果上个命令比较复杂,这是个不错的方法。
§ 0x06 Shell就是解释器
登录SSH后台后,其实就是进入了解释器上下文了,如下定义一个函数玩玩。
pi@rp:~ $ my() {
> echo hello
> }
pi@rp:~ $ my
hello
pi@rp:~ $
§ 0x0a 学习Bash的建议
- 常看man bash里面的内容;
- 学习社区里比较好的Shell写法。