我把从第一天到现在每天的 Home 目录都放上 GitHub 了,README.md 里面有说明
这是今天的 Release https://github.com/simba-fs/2021-ironman-example/releases/tag/day02
今天内容不小心写太长了 ......
首先,在介绍其他软件之前,先来看看与 CLI 操作习习相关的「shell」,我选择的 shell 是 zsh
,zsh
在 bash
的基础上扩充了很多实用的功能,像是支援更好的自动补全,各式各样的主题等等。
如果你的作业系统是 debian 系列的话,可以直接用 apt 安装 apt install zsh
。其他的 linux 发行版可以到 这个网页找找你的发行版
如果是 mac,理论上你的 shell 应该已经是 zsh 了( mac 的 shell 从 2019 开始预设是 zsh ),如果不是的话你可以用 homebrew 安装 brew install zsh
。
如果是 windows 的话,建议你开启 WSL2 或是找一台有 linux/mac 的电脑
现在我们可以透过这个指令检查是否安装成功
zsh --version
如果没有错误就是安装成功了
❓ > 现在用的是什麽 shell? |
---|
你可以使用 echo $SHELL 来看你现在使用的 shell 是那一个 |
如果你之前的 shell 不是 zsh 那就要更换预设 shell,用以下指令可以更换
chsh -s $(which zsh)
或是
chsh -s $(where zsh)
更换完 shell,重新开启终端机,你应该会看到类似下面的画面,我们选择预设的 (0) 选项就可以了。如果没有出现这个画面的话就是预设的 shell 没有切换成功或是之前你*已经用过 zsh 了。
zsh 安装画面 |
装好 zsh 後,你会发现他和 bash 或是你原本的 shell 没什麽差别,甚至更难用,那是因为我们还没设定。zplug 是一个 zsh 的套件管理器,所有的设定都写在 .zshrc
里,因此如果以後要换电脑,只需要搬走 .zshrc
一个档案,zplug 就会帮你把所有外挂装起来。
官方建议的安装方式是使用 installer,执行以下指令
$ curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh
如果出现 Enjoy zplug!
就是安装完成了,如果没有的话可能是版本不对,他会告诉你有什麽没装
现在我们要来设定 ~/.zshrc
了,这是 zsh 的设定档,他其实就是一个 shell script,但是每次启动 zsh 他会先被执行。
首先随便用一个编辑器打开 ~/.zshrc
,删掉里面所有内容(应改只有一行注解),贴上以下内容
source ~/.zplug/init.zsh
# plugins
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
zplug load
第一行是启动 zplug
第五行开始是检查是否要更新/安装套件
重新开启终端机,这样环境才会载入
接下来,我们先来认识一下 shell script,这个东西不仅可以让你操作更加顺畅,也可以帮你实现各种自动化操作。
一个普通的 shell 通常是以一个命令开头,例如 ls
、cd
、mv
,这个命令代表的是电脑中一个可执行档,你可以用 which <cmd>
或 where <cmd>
来看执行档的路径。在这个命令後面的东西都是参数,和一般程序不一样的是,这个参数因为是整个字串交给命令处理,所以通常可以不管顺序,,例如 ls -a -l
和 ls -l -a
是一样的(当然会有例外或是处理的不好的情况,但不多),更棒的是大部分成熟的指令都可以让这种只有一个字元的「短选项」合起来写,变成这样 ls -al
。
一个复杂的指令不太可能只凭几个短短的选项运作,例如 grep
(搜寻特定字串用的命令) 除了可以在选项指定档名,也可以过「特殊的方式」传一串字给他,这个方法就是我们熟悉的 stdin,也就是 scanf
、cin
这类函数接受输入的来源。
接受 stdin 的方式有两个,一个是使用者自己打,另一个是接受另一个命令的「输出」。要接受另一个「输出」的方式叫做 pipe,顾名思义就是「管线」,他可以把 A 指令的输出接给 B 指令的输入。例如以下的命令
$ ps -ax | grep zsh
先用 ps
指令列出所有的 process,再交给 grep
找出含有字串 zsh
的行。
刚刚讲了把输出转到另一个命令的输入,那如果是要写进档案里面呢?是不是个命令叫 write
?其实 shell 已经有个东西可以写档案了,就是 redirect,直接来看范例
$ ls > ls_output.txt
就这麽简单,用大於符号 >
就可以把标准输出( stdout )丢到档案里面,但是要注意的是这样写的话是直接**「覆盖」,有就是说如果原本 ls_output.txt
有内容,会直接被 ls
指令的输入覆盖,如果你想保留,可以用 >>
来「附加」**,这会让他接在档案最後面
如果某个指令没有读档案的选项,只接受 stdin,那你也可以用 redirect 将档案读进这个命令
$ wc < .zshrc
wc
这个指令会计算输入的行数/字数/字元数,上面的指令先把 .zshrc
读出来,再交给 wc
计算字数
关於其他 pipe 和 redirect 的用法可以参考 这篇文章
嗯...我知道这有点蠢,因为你可以直接在
wc
後面接路径,这里只是示范一下
改变命令行为的方式除了选项外,还有环境变数。环境变数就像 C++ 里的**「全域变数」,不管是哪个命令(函数)都可以读、写**。通常环境变数的功能是设定某个选项,好让每一次执行时不用加一堆选项(当然这个功能要命令有支援才行),或是储存某个命令的资讯,像是 $SHELL
纪录着你现在使用的 shell。
读取环境变数很简单,只需要加上钱号 $
就可以了,例如 $PATH
(通常环境变数会全大写,但其实没有什麽规范), shell 会在读到这个的时候用他的值去替代这个字串。例如以下范例
ls $HOME
$HOME 的值是你的家目录路径,shell 解释出来的命令就会是 ls /home/username
如果你想要看这个环境变数的值,可以根据上面的原理,用 echo
命令印输出来
echo $HOME
写入环境变数只有一个要点——不要加空白,用 =
指定环境变数时千万不要在 =
左右加上空白,看范例
A='a string' # O
B= 'a string' # X
C ='a string' # X
D = 'a string' # X
其实 shell script 中的钱号 $
还有超多用法,可以参考 这里
今天介绍了 zsh 和外挂管理器 zplug 还有一点点的 shell script,明天开始会用 zplug 装各种外挂来丰富我们的纯‧ CLI 整合式开发环境
<<: 从 React 开始,让你的网页material-ui起来 [Day 1] 受众&&环境
middleware 在上篇文章介绍routing时有提到Party时有传入一个handler不知道...
接下来我们来说明一下,在kibana要怎麽汇出和汇入查询资料?在实际的业务中,大家多少都有汇入、汇出...
本节是以 Golang 上游 8854368cb076ea9a2b71c8b3c8f675a8e1...
(一)正式范围定义的目的 范围定义的目的是准确说明组织所做的事情,范围说明应准确说明组织所做的事情是...
尽管夹层玻璃比钢化玻璃更安全,但价格更高。尽管如此,法规要求仍可能会影响各国安全玻璃的安装。而且,作...