CODE大全
版权声明:本文为博主原创文章,未经博主允许不得转载。

Fish 入门

发布时间:『 2017-05-06 16:09』  博客类别:系统运维  阅读(663) 评论(0)

通过前面一篇的安装教程《Shell 脚本 Fish 安装配置详解》。本文将继续教大家如何使用Fish。

Fish shell 官方地址:http://www.fishshell.com/

我们先看看在 fish 中如何完成一些常见的 shell 任务。

使用 ^ 操作符重定向标准错误

要想重定向标准输入和标准输出,应该分别使用操作符 < 和 >。要想重定向标准错误,应该使用 ^ 操作符,见 下图。使用 ^^ 把标准错误追加到一个文件中。

Fish 用 ^ 操作符重定向标准错误

在第3行命令中,rm 产生的错误消息被重定向到 errors 文件中。命令 4 显示此文件的内容。fish shell 为重定向提供各种支持,比如把描述符组合成一个流和结束描述符。

顺便说一句,文本的颜色和下划线不是编辑出来的。shell 会在您输入时在 CLI 中突出显示文本。绿色表示命令名是有效的;无效的命令名用红色表示。下划线表示指定的文件存在。

使用圆括号运行子 shell

使用圆括号(())运行子 shell,见下图。圆括号中的文本被解释为一系列命令,shell 会把它们替换为执行结果。

使用圆括号运行子 shell

通过创建 fish 函数创建别名

函数可以包含一个或多个命令,特殊变量 $argv 会自动展开成命令行上传递的参数列表。

可以用 functions 命令列出已定义的所有函数。使用 functions --erase name 删除函数,例如 functions --erase ll。

还可以立即保存在命令行上编写的任何函数。在编写完代码时,输入 funcsave name,例如 funcsave ll。在此之后,当前运行的所有 shell 和以后的所有 shell 都可以使用此函数。可以使用 funced name 命令以交互方式编辑现有的函数。funced 命令提供语法突出显示、制表符补全和自动缩进;funcsave 和 funced 使用户能够更方便地定制 shell。

检查一个变量是否存在

输入 set variable namevalue 来设置变量。与内置命令 functions 一样,输入 set --erase variable name 就可以删除一个变量。输入美元符号($)和变量名,就可以获取变量中存储的值,见下图:

set variable namevalue 来设置变量

fish 提供 --query 选项来检查是否定义了一个变量。如果已经设置了此变量,set --query 返回状态码 0,这表示没有出现错误;否则,返回 1。语句 6 用 or 操作符连接两个命令:第二个命令(echo)只在第一个命令失败的情况下执行。

那么,fish 如何处理 $var、'$var'、"$var" 和 `$var` 呢?

答案就是下面的几条规则。

Fish 遵守的规则

  • 如果变量包含空格,那么空格会被保留,变量总是作为单一参数。如下图:

    fish 按原样保留字符串中嵌入的空格

  • 如果最外边的引号是双引号,那么展开所有变量

  • 如果最外边的引号是单引号,那么不展开变量

上图中的代码解释:

命令 1 创建四个 文件,最后一个文件的名称包含空格。命令 3 和 4 删除 file 变量指定的文件。命令 6 和 7 删除 twofiles 变量指定的两个文件。仔细看一下命令 6:因为值没有放在引号(单引号或双引号)中,所以不保留空格。因此,命令 7 把此变量展开成两个参数并删除两个文件。命令 9 和 10 重复命令 6 和 7 中的场景。

命令 11 和 12 演示空格规则。尽管在命令 12 中变量没有放在双引号中,但是 fish 在命令 11 中保留空格。非常好。

命令 14 到 16 演示 fish 的嵌套引号规则。现在,再看一下命令 11、15 和 16。shell 使用颜色编码显示匹配的引号,以此确保语法正确。再看一下命令 9 和 11。后一个命令在文件名上显示下划线,这表示此文件存在。在命令 9 中没有下划线,这提示用户某些地方出错了。

fish 的首字母代表 Friendly,对用户友好是它的主要目标。


——— 全文完 ———
如有版权问题,请联系532009913@qq.com。
关键字:   Fish     shell脚本     命令行     fish规则  
评论信息
暂无评论
发表评论
验证码: 
Powered by CODE大全 | 鄂ICP备14009759号-2 | 网站留言 Copyright © 2014-2016 CODE大全 版权所有