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

Shell 脚本 Fish 安装配置详解

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

Friendly Interactive Shell(fish)对于 UNIX 新手和专家都很适合。Fish 也很容易使用。它的语法、上下文相关的帮助和颜色编码的命令行界面(CLI)显著简化了 UNIX 的使用,减轻了脚本编程的负担。

Bourne shell(和大多数常用的 UNIX shell)中,'$var'、"$var" 和 `$var` 看起来相似,但是它们会产生很不一样的结果 。

bash-1) # Demonstrate the differences between single-, double-, and back quotes
bash-2) var=ls
bash-3) echo '$var'
$var
bash-4) echo "$var" 
ls
bash-5) echo `$var`
Rakefile app bin components config db
    doc lib log patches public script src
    test tmp vendor

在上面的命令序列中,把变量 var 设置为两字母的字符串 ls。在第一个 echo 命令中,单引号禁止解释此变量,因此会按原样显示引号中的文本,即四字母的字符串 $var。在第 4 行代码中,双引号会解释此变量,所以结果是字符串 ls。最后,反撇号解释变量并作为子 shell 运行中间结果。因此,`$var` 产生中间字符串 ls,它作为 shell 命令运行,生成当前目录的内容列表。

当然,这三种操作符(单引号、双引号和反撇号)都有合法的用途,但是与英语中的例外一样,记住和掌握这些细微差异很令人头疼。为了进一步证明这一点,请问:$var 和 "$var" 之间有什么差异?(提示:假设 $var 包含空格。)

bash-1) # Create three files and try to remove two
bash-2) touch three two one
bash-3) var="one two"
bash-4) rm "$var"
rm: one two: No such file or directory
bash-5) rm $var
bash-6) ls
three

如果一个变量包含空格,双引号会按原样把变量展开为一个 参数。否则,变量中的任何空格都被解释为参数分隔符。

shell 语法很令人头疼。这很糟糕,因为它使 CLI(UNIX 最强大的特性之一)更难掌握。上面这样的不一致问题甚至会给 UNIX 老手带来困扰。

好在,fish (Friendly Interactive Shell) 的出现改变了这种混乱局面,它提供简明的语法,显著改善了用户体验。与其他 shell 一样,fish 也提供重定向、快捷方式、globbing(即通配符的展开)、子 shell、制表符补全和变量。但是,与其他 shell 不同,fish 还提供颜色编码的 CLI、功能丰富的命令行编辑器和大量文档。

另外,对于执行任何操作,fish 只提供一种方式,这非常明智。如果一个 UNIX 实用程序能够完成某一任务,fish 就不会通过内置命令重复提供此特性。例如,fish 使用系统范围的应用程序 /bin/kill 终止进程。(与之相反,Bourne shell 通过一个内置应用程序实现了它自己的 kill 版本。可以在 Bourne shell 命令提示上输入 /bin/kill 来访问此版本)。fish 尽可能优先考虑简单性而不是灵活性,这显著简化了它的使用方法。

下面,我们来安装 fish 并体验它的一些特性。

安装 fish

fish 是由 Axel Liljencrantz 创建的一个开放源码项目,采用的许可协议是 GNU General Public License, version 2。到编写本文时,fish 的最新版本是 1.23.0,此版本于 2008 年 1 月 13 日发布。

如果使用 UNIX 或 UNIX 类系统(比如 Linux® 或 Mac OS X),那么应该很容易在您的系统上从源代码构建 fish。下面是构建步骤

  1. 下载程序的最新源代码压缩包。

  2. 解压。

  3. 进入源代码目录。

  4. 配置构建。

  5. 运行 make。

对应构建命令如下:

bash-1) wget http://www.fishshell.org/files/1.23.0/fish-1.23.0.tar.gz
bash-2) tar xzvf fish-1.23.0.tar.gz
bash-3) cd fish-1.23.0
bash-4) ./configure --without-xsel
checking if autoconf needs to be run... no
checking if autoheader needs to be run... no
checking for /usr/pkg/include include directory... no
...
bash-5) make
gcc -c -o function.o function.c
...
bash-6) sudo make install
...
To use fish as your login shell:
* add the line '/usr/bin/fish' to the file '/etc/shells'.
* use the command 'chsh -s /usr/bin/fish'.

如果使用 UNIX 类系统,configure 可能不需要更多的标志。但是,为了尽可能减少依赖性并让 fish 采用与常用 shell 相同的目录结构,可以分别添加 --without-xsel 和 --prefix=/usr。(如果使用 Mac OS X version 10.4 Leopard,那么还要添加参数 LDFLAGS=-liconv。如果在 Mac OS X 上省略后一个选项,那么无法编译附带的 fish 实用程序) 。

另外,如果使用流行的 UNIX 版本,很可能会找到预先构建好的二进制版本,可以把它直接安装在您的系统上。例如,如果使用 Debian Linux,那么可以用 sudo apt-get install fish 命令直接安装 fish。请访问 fish 项目的主页,了解是否有针对您的系统的二进制版本。


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