全国统一学习专线

专为 90 后定制的 Shell, 我倒要看看有啥不一样!!!

logo
来源:七品教育

2024-03-26|已帮助:52

进入 >

来自:马可linux运维

Bash和zsh是众多Shells中最常用的。除此之外,还有一颗闪亮的星星——鱼壳,它以现代的设计和强大的功能备受推崇,成为了众多开发者和系统管理员的最爱。就像官网的finally,一个90后的命令行shell,翻译过来就是鱼壳是一个90后的Shell。其主要特点如下:

安装时默认集成了很多需要的功能,不可能配置很多。

命令行语法突出显示,错误以红色显示。

智能提示

可视化配置:可以使用网页进行终端配置。

在本文中,我们将简要介绍Fish Shell的各种特性和优势,并向您展示如何开始使用和定制这个强大的Shell。

无论你是新手还是有经验的用户,都会发现鱼壳给命令行界面带来的快感和效率提升。你准备好探索奇妙的鱼壳世界了吗?让我们一起开始这激动人心的旅程吧!

一、安装前需要安装fish,因为我这边是Mac系统,下面只介绍Mac下的安装方法。更多系统安装方法请参考官方文档。

brew install fish

上图中勾勒的部分是fish的安装路径,在这里简单记下比较好,以后再用。

第二,切换

2.1手动切换默认情况下,命令行终端使用的Shell是Bash或者zsh,这里我们需要通过Fish命令切换到Fish Shell。

fish

如果这里需要退出鱼壳,可以执行exit命令退出退出。

2.2设置为默认外壳如果您想使用鱼外壳作为默认外壳,您可以使用以下命令:

在开始之前,我们需要确认fish的安装路径,安装fish时会在输出日志中给出相应的安装地址。

接下来我们需要在/etc/shell中追加fish的脚本路径,否则在切换默认shell时会报错非标准shell。脚本路径为:{fish安装路径}/bin/fish。

sudo vim /etc/shells

让我们通过chsh -s S切换默认Shell。

chsh -s /opt/homebrew/Cellar/fish/3.6.1/bin/fish

切换后,我们将重新打开一个终端,默认使用鱼壳。

如果需要切换回来,只需执行chsh -s /bin/zsh或者chsh -s /bin/bash即可。

chsh -s /bin/zsh

最后补充一下:由于Fish Shell的语法与Bash有很大不同,可能与Bash脚本不兼容,所以建议不要将Fish Shell设置为默认Shell,每次都要手动启动。

三、易用功能介绍3.1命令行语法高亮鱼壳会在我们输入命令的时候高亮显示语法。这里最重要的是对潜在错误的检测,即在命令输入且未执行之前,可以提前检测输入内容,并突出显示检测结果。相关的突出显示逻辑如下:

默认情况下,有效命令以蓝色突出显示。

默认情况下,无效命令以红色突出显示。

有效路径将带有下划线。

不匹配的括号或逗号

3.2自动完成建议鱼壳自带命令完成建议功能。当我们输入命令时,会看到光标后面以软灰色显示的推荐内容,这些内容可能来源于鱼壳或者历史上使用过的命令。

如果你想采纳建议,你可以按-

如果只采用了一部分,可以按Alt-

3.3 Tab选项如果我们需要查看给定命令是否有其他可能,只需在输入几个字母后按Tab键即可。

下面是进入git后直接按Tab的结果,直接列出了所有可能的命令和描述。

下面是输入git和空格后按Tab的结果,会给出git所有可能的命令和描述。

当然,除了补全命令,还可以补全参数。以下是键入-后按Tab的结果,会给出git commit所有可能的参数和描述。

3.4基于Web的配置器鱼壳与其他壳相比,有一个有趣的功能,就是你可以通过浏览器配置或查看壳的主题、提示、功能函数、常量、历史、快捷键。

首先我们需要通过Fish进入鱼壳,然后执行fish_config命令。此时,将自动打开一个配置页面。

fishfish_config

第一个主题颜色配置,官方默认提供多套主题供选择,当然如果不喜欢也可以自己自定义主题颜色。

第二部分是在命令行前面设置提示符。同样的官方默认给出了很多选择,尤其是配置页面没有提供自定义提示的入口。如果需要自定义,需要修改配置文件,自己写函数。

第三部分列出了所有的功能函数,可以理解为所有可用命令的源代码,但这里不允许修改。

第四部分列出了所有的常数,这里不允许修改。

第五部分记录所有使用过的命令,历史可以在这里删除。

第六部分是快捷键的绑定,这里不允许修改。

3.5独立自定义配置文件鱼壳为用户提供了独立的配置文件(~/。config/fish/config.fish),我们可以在其中编写各种自定义函数、别名、常量.每次启动鱼壳后都会自动加载。这里我们可以通过cat检查配置文件。

$ cat ~/.config/fish/config.fishif status is-interactive end

让我们尝试在这个配置文件中添加几个与git相关的别名,进行一个简单的测试。

vim ~/.config/fish/config.fish+ alias g 'git'+ alias gst 'git status'+ alias grs 'git reset --soft'+ alias grh 'git reset --hard'+ alias gb 'git branch'+ alias gba 'git branch -a'+ alias gl 'git pull'

if status is-interactive # Commands to run in interactive sessions can go hereend

重新打开鱼壳,尝试使用别名gl拉代码。下图显示别名可以正常使用,说明我们的配置是有效的。

3.6简单易懂的语法鱼壳的语法更倾向于高级语言。语法学起来比较快,读起来也比较清晰。以下是几种常见语法的写法。更多语法可以在官网找到。

如果语句

if grep fish /etc/shells echo Found fishelse if grep bash /etc/shells echo Found bashelse echo Got nothingend

Conversion statement

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.bakend

功能

function ll ls -lhG $argvendfunction ls command ls -hG $argvend

四、自定义“提示”如上所述,我们可以在Web配置页面配置我们的提示,但是在那里只能使用政府提供的几套默认样式。下面我们将介绍如何定制一个个性化的提示!

方法: 在配置文件~/.config/fish/config.fish 中, 新增一个fish_prompt 函数用于定义提示符

这里我们可以使用vscode 打开配置文件, mac 访达默认情况下是不展示隐藏文件的, 这里我们可以通过com + shift + . 来查看隐藏文件, 然后将配置文件直接拖到vscode 中进行打开

默认情况下, vscode 是不支持fish 语法高亮的, 这里我们可以安装一个fish 插件, 这样就可以支持语法高亮、格式化了

下面我们开始定制提示符, 这里我直接给出完整代码, 具体讲解可以看注释

关键语法说明:

2/dev/作用是, 命令悄摸摸运行不输出任何日志

set 用于设置变量, -g 表示全局变量, -f 表示函数内部变量, 更多内容可查阅官方文档

function git_is_repo -d '检测当前目录是否是git 仓库' test -d .git or begin set -l info (command git rev-parse --git-dir --is-bare-repository 2/dev/) and test $info[2]=false endendfunction git_branch_name -d '获取当前分支名' git_is_repo; and begin command git symbolic-ref --short HEAD 2 /dev/; or command git show-ref --head -s --abbrev | head -n1 2 /dev/endendfunction fish_prompt -d '终端提示符' set -f __prompt_data (set_color -o 46C74B)'['(date '+%H时%M分%S秒')(set_color -o 46C74B)']' set -f __prompt_pwd ' '(set_color 00FF00)(prompt_pwd --full-length-dirs=10) if git_is_repo set -g __fish_git_prompt_char_stagedstate '' set -g __fish_git_prompt_char_dirtystate '' set -g __fish_git_prompt_char_cleanstate '' __fish_git_prompt 2 /dev/; set -f __informative_status (set_color -o bryellow)(__fish_git_prompt_informative_status) set -f __branch (set_color brred)(git_branch_name) set -f __prompt_git_info (set_color FF4BFF)' ('(git_branch_name)': '(set_color red)$__informative_status(set_color FF4BFF)')' else set -f __prompt_git_info '' end echo (set_color 00BA00)''$__prompt_data$__prompt_pwd$__prompt_git_info(set_color normal) echo (set_color 00BA00)''(set_color FF635C)'$ 'endif status is-interactive end

最终效果如下

补充: 如果想要加上用户名可直接使用常量$USER

五、修改欢迎语如下图, 每次我们切换到Fish Shell 都会有欢迎语输出

如果对于这个欢迎语不喜欢想要修改, 可以通过在配置文件~/.config/fish/config.fish 定义一个fish_greeting 函数来进行修改

function fish_greeting echo Hello friend! echo The time is (set_color yellow; date +%T; set_color normal) and this machine is called $hostnameend

原文链接:https://juejin.cn/post/7257410068647297061

波哥IT行业近二十年的IT老炮。常年潜伏于国企、各一二线大厂中。硬件集成入行,直至虚拟技术、容器化。岗位历经系统集成、DBA、全栈开发、sre、项目经理、产品经理、部门总监。

主要作品:IT类资源汇聚门户:https://www.98dev.com

各大短视频平台:98dev

各大主要技术论坛博客:IT运维技术圈

长视频教学作品: 《波哥讲网络》 《波哥讲git》 《波哥讲gitlab》

小程序:IT面试精选

构建技术社区:+V itboge1521 入学习交流群

以上是七品教育整理的专为 90 后定制的 Shell, 我倒要看看有啥不一样!!!全部内容。