fishshell 比 bash 更好用的 shell

安装

# Ubuntu 和 Debian 的安装方法。

sudo apt-get install fish

# Mac 的安装方法。

brew install fish

启动与帮助

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

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

$ fish

# 使用过程中,如果需要帮助,可以输入 help 命令

$ help

彩色显示

# 无效命令为红色

$ mkd

# 有效命令为蓝色

$ mkdir

# 有效路径会有下划线。如果没有下划线,你就知道这个路径不存在。

$ cat ~/somefi

自动建议

Fish 会自动在光标后面给出建议,表示可能的选项,颜色为灰色。如果采纳建议,可以按下 → 或 Control + F 。如果只采纳一部分,可以按下 Alt + →。

$ /bin/hostname # 命令建议

$ grep --ignore-case # 参数建议

$ ls node_modules # 路径建议

自动补全

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

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

脚本语法

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 还提供 Web 界面配置该文件。

$ fish_config # 浏览器打开 Web 界面配置

Running Commands: 兼容 bash 等shell的命令执行方式

Getting Help: help/man cmd -> browser/terminal

Syntax Highlighting: 实时检查命令是否正确

Wildcards: 支持缩写 * 递归 匹配

Pipes and Redirections: 使用 ^ 代表 stderr

Autosuggestions: 自动建议, 可以使用 Ctrl-f / -> 来补全

Tab Completions: 更强大的 tab 补全

Variables: 使用 set 设置

Exit Status: 使用 echo $status 替代 $?

Exports (Shell Variables)

Lists: all variables in fish are really lists

Command Substitutions: 使用 (cmd) 来执行命令, 而不是 反引号、$()

Combiners (And, Or, Not): 不支持使用符合来表示逻辑运算

Functions:使用 $argv 替代 $1

Conditionals (If, Else, Switch) / Functions / Loops: 更人性化的写法(参考 py)

Prompt: function fish_prompt 实现

Startup (Where’s .bashrc?): ~/.config/fish/config.fish,更好的方式是 autoloading-function、universal-variables

Autoloading Functions: ~/.config/fish/functions/.

Universal Variables:a variable whose value is shared across all instances of fish

set name 'czl' # 设置变量,替代 name=czl

echo $name

echo $status # exit status,替代 $?

env # 环境变量

set -x MyVariable SomeValue # 替代 export

set -e MyVariable

set PATH $PATH /usr/local/bin # 使用 lists 记录 PATH

set -U fish_user_paths /usr/local/bin $fish_user_paths # 永久生效

touch "testing_"(date +%s)".txt" # command subtitution,替代 `date +%s`

cp file.txt file.txt.bak; and echo 'back success'; or echo 'back fail' # combiner

functions # 列出 fish 下定义的函数

参考资料

fish-shell官网

linux fish,LINUX命令fishshell-系统管理-比bash更好用的shell相关推荐

  1. Linux 基本管理命令(系统管理,用户管理,进程管理)

    目录 系统管理 man 介绍 语法 man常用的参数 shutdown(关机命令) shutdown文档 语法 参数说明 实例 reboot 介绍 语法 参数说明 实例 sudo命令 介绍 语法 参数 ...

  2. Linux 使用zip命令报错:-bash: zip: command not found

    今天学习Linux的时候,使用zip发现报错了,找不到这个命令行 出现这个原因是因为我们没有安装zip/unzip命令,我们使用yum命令进行安装就可以了 yum install zip 希望能帮助到 ...

  3. Linux下Grub命令配置详解

    grub(Grand Unified Boot Loader)启动引导器 与grub相似软件比较 BM:安装多操作系统软件,必须把两个操作系统安装在主分区,硬盘最多可以分4个主分区. LILO:以前l ...

  4. Linux操作系统Ifconfig命令详细解析

    无论是Linux 自动安装还是我们手工安装,Linux 都会向你询问有关网络的问题并配置相关的软件.这个用于配置网卡的基本命令就是ifconfig. 在执行ifconfig 命令后,系统将在内核表中设 ...

  5. linux bash命令找不到,Linux下提示命令找不到:bash:command not found

    Linux下输入某些命令时会提示:bash:command not found. 首先,查看$PATH中是否包含了这些命令. $PATH:决定了shell到哪些目录中去寻找命令或程序,PATH值是一系 ...

  6. Linux常见命令:与系统管理有关的命令(转)

    Linux常见命令:与系统管理有关的命令(转) wall命令 这个命令的功能是对全部已登录的用户发送信息,用户可以先把要发送的信息写好存入一个文件中,然后输入: # wall < 文件名 这样就 ...

  7. Linux下提示命令找不到:bash:command not found

    Linux下输入某些命令时会提示:bash:command not found. 情况一: 首先,查看$PATH中是否包含了这些命令. $PATH:决定了shell到哪些目录中去寻找命令或程序,PAT ...

  8. linux sudo bash,命令'su','sudo bash'和'sudo sh'之间的区别?

    su -sudo bashsudo sh 背景 在Linux (和Unix一般)中,有一个名为SuperUser的root,SuperUser可以做所有事情,因此用SuperUser进行日常工作很危险 ...

  9. Linux命令行–基本的bash shell命令

    启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...

最新文章

  1. apache 不解释php,apache-2.2 – Apache不解释.PHP文件
  2. 1.7 开发集和测试集的大小-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  3. CentOS 7.0卸载自带的mariadb
  4. 【BIM入门实战】Revit 2018墙体绘制—别墅地下室
  5. jquery:字符串转json对象,json对象转字符串
  6. 操作系统复习之进程描述和控制
  7. 常见的INI(PHP)配置
  8. iOS :高德地图SDK配置教程(安装CocoaPods、生成Podfile文件、安装SDK、demo简单使用等)
  9. Windows XP 禁用屏幕保护功能
  10. iOS 注册极光推送
  11. 关于Windows美化的小结
  12. windows64位 注册ocx
  13. Adversarial Machine Learning 经典算法解读(FGSM, DeepFool)
  14. Hadoop 集群在WebUI界面不能下载文件
  15. 五角星符号怎么打出来
  16. 华为交换机配置Guest vlan
  17. unittest输出测试报告
  18. 不讲武德,Kubernetes 弃用 Docker刷爆了网络,我们公司也慌了!
  19. Qt QGraphicsTextItem 实现双击进入编辑状态
  20. Java处理上千万数据量的数据

热门文章

  1. sublime text 3170 破解工具
  2. Spring boot配置文件随机数
  3. android fragment contextmenu,在 fragment 中,无法为listView项创建 contextMenu_android_开发99编程知识库...
  4. 服务器自动登录 linux,linux下如何自动登录远程服务器?
  5. python数据对比找不同,不同模式间的数据比较技术
  6. 如何通过缓存来提升系统性能
  7. 线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调试不用愁!
  8. 信息系统项目管理知识--项目风险管理
  9. 【KVM系列06】Nova 通过 libvirt 管理 QEMU/KVM 虚机
  10. 网络编程3之TCP/IP协议