为什么我用zsh代替csh?

算法聆风人
• 阅读 3415

总结

zsh拥有成熟的生态,现代的语法,强大的功能,是目前shell的最好选择。

我用shell做什么

我是shell的重度用户,开发工作除了写文档都是在shell下完成的。所以shell就是我的生产力工具,打造高效的shell环境,可以大幅提高我的工作效率。有很多功能,比如文件打开关闭,文件目录跳转,初始化配置,eda工具设置,是不适合用其他脚本语言来写的,shell脚本也是最佳选项。很多子功能适合编译成二进制文件后,由shell来统一调用支配。

所以选择shell非常关注它的生态以及生态里已有的功能。生态不好,就需要自己造轮子,显示不适合我这样的IC开发者,所以我最选淘汰的是我们行业最常用的csh. 其次就是最好有成套的环境可以直接使用,这样就不需要自己花大量时间去配置成方便使用的环境。这方面oh-my-zsh的存在极大减少了使用者的配置时间。拿来主义非常爽。内置非常多主题和插件,直接可以使用。

担忧

在我们这个行业非常多人用csh,并且可能有些脚本是用csh写的,觉得转过来非常不方便,相当于别人已经有csh生态了,你一个人转过来相当于抛弃了生态。
这在我看来完全不是问题,因为别人所谓的脚本如果是很严谨的脚本,一定不会依赖于SHELL的,如果依赖于SHELL,那么脚本一定是比较随意的,或者是source一些变量设定和路径设定的,这种如果一定想重用,可以用工具自动转成bash(这样zsh也可以用了)。这种是一次性工作量。
相比zsh带来的效率提升,这个代价很小。
小声说一句,我其实并没有用其他人的csh脚本,因为他们的脚本真的只是给自己用的一些变量设定和alias之类。我是用不上的。

下面我来一一介绍它的优点。

兼容性

zsh基本兼容bash, 所以绝大部分bash脚本可以直接使用。
细微的差别参见我的这篇文章

文件补全

只要按下tab键, 它可以根据前文命令列出文件或目录。
如果是svn add, 它会只列出末添加到仓库中的文件。
如果是cd, 它会只列出目录。

便捷的目录切换

可以用cd .....向上5层
可以用d回车列出最近5个目录,然后用数字选择进入哪个目录
可以用cd /v/o/s/d来进入/var/opt/synopsys/doc目录
为什么我用zsh代替csh?

命令选项补全

这是补全的一种,但它的强大值得再提一遍
它可以理念命令。比如
dconf <Tab>
会自动列出subcommand

$ dconf <Tab>
compile  -- compile a binary database from keyfiles
dump     -- dump an entire subpath to stdout
help     -- display help information
list     -- list the contents of a directory
load     -- populate a subpath from stdin
read     -- read the value of a key
reset    -- reset the value of a key or directory
update   -- update the system databases
watch    -- watch a path for changes
write    -- change the value of a key

命令参数补全

比如上面的命令输完dconf read /按下<Tab>就会自动输出org/system两个选项

$ dconf read /
org/     system/

再比如输入kill vim后按下tab, 如果只有一个匹配项,会自动变成kill 5378,多个会如下:
为什么我用zsh代替csh?

历史记录

zsh的历史记录在多个terminal是共享,可以用向上箭头来搜索,比如输入make然后用向上键,它会依次列出以往以make开关的命令,这在实现工作中非常高效。

oh-my-zsh

150kStar、275+插件、140+主题、2000+贡献者....., 从这组数字就知道这是多么优秀的一个shell配套工具。

oh-my-zsh的存在极大简化了zsh配置和使用的问题,相当于精装房直接入住。

各种主题只要在配置文件里写一下就成功了, 各种插件只要在配置文件里加上就安装成功了

这个我们不多讲了,有兴趣可以直接使用就好了。

附加插件

https://github.com/zsh-users下有一些增强插件,都很命令,尤其推荐其中的zsh-autosuggestions, 它可以自动列出你以前输入过的命令和选项
比如用上面的dconf命令为例
为什么我用zsh代替csh?

文件类型敏感的alias

比如配制如下:

alias -s tgz='tar -zxvf'
alias -s gz='tar -zxvf'
alias -s bz2='tar -jxvf'
alias -s zip='unzip'
alias -s v=vi
alias -s sv=vi
alias -s vhdl=vi
alias -s cpp=vi

在zsh下输入test.sv会自动用vi打开,输入test.tgz,会用tar -zxvf test.tgz执行

点赞
收藏
评论区
推荐文章
芝士年糕 芝士年糕
3年前
Linux shell 内建命令
前言一、shell简介shell是Linux系统中一个提供命名行的交互式工具,本质是一个c语言可执行程序,为用户提供了启动程序,管理文件系统中的文件以及运行在Linux系统上的进程的途径。命令行提示符是shell负责交互的部分,允许用户输入文本命令,然后解释命令,并在内核中执行。Linux系统上有多种shell可用,Linux发行版默认的shell都是ba
Shell在日常工作中的应用实践
作为一名测试开发工程师,在与linux服务器交互过程中,大都遇到过许多问题,shell脚本小巧且功能强大,本篇文章给大家分享了些日常使用到的shell脚本,帮助我们提高工作效率
Stella981 Stella981
4年前
Shell函数返回值
Shell函数返回值shell函数返回值一般有3种方式:1.return语句shell函数的返回值可以和其他语言的返回值一样,通过return语句返回。比如:!/bin/bashfunctionmytest(){echo"mytestfunction"echo
Stella981 Stella981
4年前
Shell编程基础
本文索引:shell中的函数shell中的数组告警系统需求分析shell中的函数shell作为一种编程语言,必然有函数。函数可以大大减少代码,提高代码复用率。shell中的函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式
Stella981 Stella981
4年前
Linux Shell DAY6
shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量脚本中的逻辑判断shell脚本介绍shell是什么shell是一种脚本语言可以使用逻辑判断、循环等语法可以自定义函数
可莉 可莉
4年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
Stella981 Stella981
4年前
Linux基础(1)之shell
  shell作为下Linux系统中用户与内核交互的接口,用于将用户输入的命令转化为内核可以理解的指令,进而通过内核操作硬件资源,完成相应的功能。shell分为两种,图形shell和命令行shell。图形shell主要有KDE,Gnome等,命令行shell有常见的sh,zsh,csh,bash,ksh,tcsh等。  这里主介绍最常用的bash
Stella981 Stella981
4年前
Linux查看内置命令和非内置命令帮助的几种方法(man、help、info)
!(https://oscimg.oschina.net/oscnet/53cb7c40ce2945df9de5490f1d07e660.jpg)内置命令就是shell内核自带的,因为shell当中自己要进行管理,那么就需要一些命令进行管理,不同的shell肯定有不同的shell命令,我们用type命令就可以看到其的类型,内置shell命令其
Stella981 Stella981
4年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
可莉 可莉
4年前
20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量
第二十章shell编程20.1shell介绍shell是一种脚本语言可以使用逻辑判断、循环等语法可自定义函数shell是系统命令的集合shell脚本可以实现自动化运维,能大大增加我们的运维效率20.2shell脚本结构和执行
linux云服务器常用设置
更改shell  默认地,ubuntu系统默认的shell是dash,但更常用的shell是bash  通过下面命令可以将dash更改为bashdpkgreconfiguredash  然后选  执行lsl/bin/sh命令,查看shell类型已经修改为bashlsl/bin/sh帐号权限  为了提高服务器安全性,需要设置一个高权限的账号来代替