好用的 Fish shell 入门教程

赞赏 2017-05-02

命令行是程序员的必备技能。图形界面虽然好看,解决问题还是要靠命令行。
命令行由 Shell 提供。各种命令通过 Shell,传递给操作系统的内核。学习命令行就是在学习 Shell。


Shell 有好几种,目前最常用是 Bashzsh。但是,在我看来,它们都不如 Fish Shell 好用。

五年前,我第一次尝试 Fish,感到很惊艳,一直用到现在。

本文介绍 Fish 的主要特点,希望你也来尝试它。


一、简介

Fish 是"the friendly interactive shell"的简称,最大特点就是方便易用。

很多其他 Shell 需要配置才有的功能,Fish 默认提供,不需要任何配置。

如果你想拥有一个方便好用的 Shell,又不想学习一大堆语法,或者花费很多时间配置,那么你一定要尝试一下 Fish。


二、安装

Ubuntu 和 Debian 的安装方法。

$ sudo apt-get install fish

Mac 的安装方法。

$ brew install fish

其他系统的安装请参考官方网站


三、启动与帮助

安装完成后,就可以启动 Fish。

$ fish

由于 Fish 的语法与 Bash 有很大差异,Bash 脚本一般不兼容。因此,我建议不要将 Fish 设为默认 Shell,而是每次手动启动它。

使用过程中,如果需要帮助,可以输入help命令。浏览器就会自动打开,显示在线文档。

$ help

四、彩色显示

进入 Fish 以后,你注意到的第一件事,可能就是它默认彩色显示。

# 无效命令为红色
$ mkd# 有效命令为蓝色
$ mkdir

有效路径会有下划线。

$ cat ~/somefi

上面代码表示,存在以~/somefi开头的路径。如果没有下划线,你就知道这个路径不存在。


五、自动建议

Fish 会自动在光标后面给出建议,表示可能的选项,颜色为灰色。

# 命令建议
$ /bin/hostname# 参数建议
$ grep --ignore-case# 路径建议
$ ls node_modules

如果采纳建议,可以按下Control + F。如果只采纳一部分,可以按下Alt + →


六、自动补全

输入命令时,Fish 会自动显示匹配的上一条历史记录。

$ git commit -m "feat: first commit"

如果没有匹配的历史记录,Fish 会猜测可能的结果,自动补全各种输入。比如,输入pyt再按下Tab,就会自动补全为python命令。

如果有多个可能的结果,Fish 会把它们都列出,还带有简要介绍。

$ vi[按下 Tab 键]

vi (Executable link, 2.7MB)
view (Vi IMproved, 一个程序员的文本编辑器)
viewer.py (Executable, 967B)
viewres  (Graphical class browser for Xt)
...and 12 more rows

这时,再按一次tab,就可以在这些命令之中选择。

除了补全命令,Fish 还可以补全参数。比如,ls命令的-l参数后面按下Tab键,就会显示可以连用的其他参数。

$ ls -l[按下 Tab 键]

-l1  (List one file per line)
-lA  (Show hidden except . and ..)  
-la  (Show hidden)
-lB  (Ignore files ending with ~)
...and 16 more rows```

Fish 还可以自动补全 Git 分支。

$ git checkout master


七、易懂的语法

Fish 的语法非常自然,一眼就能看懂。

if语句。

if grep fish /etc/shells
    echo Found fish
else if grep bash /etc/shells
    echo Found bash
else
    echo Got nothing
end

switch语句。

switch (uname)
case Linux
    echo Hi Tux!
case Darwin
    echo Hi Hexley!
case FreeBSD NetBSD DragonFly
    echo Hi Beastie!
case '*'
    echo Hi, stranger!
end

while循环。

while true
    echo "Loop forever"
end

for循环。

for file in *.txt
    cp $file $file.bak
end


八、函数

Fish 的函数用来封装命令,或者为现有的命令起别名。

function ll
    ls -lhG $argv
end

上面代码定义了一个ll函数。命令行执行这个函数以后,就可以用ll命令替代ls -lhG。其中,变量$argv表示函数的参数。

下面是另一个例子。

function ls
    command ls -hG $argv
end

上面的代码重新定义ls命令。注意,函数体内的ls之前,要加上command,否则会因为无限循环而报错。


九、提示符

fish_prompt函数用于定义命令行提示符(prompt)。

function fish_prompt
    set_color purple
    date "+%m/%d/%y"
    set_color FF0
    echo (pwd) '>'
    set_color normal
end

执行上面的函数以后,你的命令行提示符就会变成下面这样。

02/06/13
/home/tutorial >


十、配置

Fish 的配置文件是~/.config/fish/config.fish,每次 Fish 启动,就会自动加载这个文件。

我们可以在这个文件里面写入各种自定义函数,它们会被自动加载。比如,上面的fish_prompt函数就可以写在这个文件里面,这样每次启动 Fish,就会出现自定义的提示符。

Fish 还提供 Web 界面配置该文件。

$ fish_config

输入上面的命令以后,浏览器就会自动打开本机的 8000 端口,用户可以在网页上对 Fish 进行配置,比如选择提示符和配色主题。

(完)

登陆后阅读全文
阅读 1710 赞赏 0 有用 5 没用 0 收藏 7 分享

   



0 条留言

linux分享的头像

linux分享

每个软件都有确定的用途

相关文章

Linux 登入Shell与非登入Shell有什么区别?

Linux下窗口管理器 xmonad 的使用教程

云服务器 ECS linux 如何更改系统默认 Shell

电脑无线连接安卓手机 进入android命令行模式(完胜adb shell数据线连接方式)

谁敢在我电脑上放这个脚本,我杀了他

bash 执行 shell 脚本提示 ll: command not found

我是如何执行 "rm -rf ~" 的

Linux下如何设置和查看系统环境变量

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

我是如何执行 "rm -rf ~" 的

正态分布为什么常见?(财富的分布却不符合正态分布)

Linux下窗口管理器 xmonad 的使用教程

用披萨做比喻来解释 IaaS,PaaS,SaaS 的区别

如何制作CSR(证书私钥和证书请求文件)文件?

php RedisException with message read error on connection

Windows环境下ping丢包或不通时链路测试工具推荐

Linux下ping丢包或不通时链路测试工具推荐

链路测试结果分析说明及常见链路异常场景和测试报告

SSH 登录时出现如下错误:login: Module is unknown

手机扫一扫
分享文章