值得切换到zsh以供临时使用吗?[关闭]


192

Mac OS X中的默认外壳是bash,我通常很高兴使用它。我只是认为这是理所当然的。不过,如果它能自动完成更多的工作,那将是非常不错的,而且我zsh在这方面也听说过很多好事。但是我并不是很愿意花几个小时来修改设置,以将我的命令行使用量提高一点点,因为我在命令行上的生活还不错。

(据我了解,bash还可以将其配置为更聪明地自动完成。这并不是我一直热衷的配置。)

zsh即使在少数情况下,切换到我的生活也会更轻松吗?或者,如果您花时间学习为什么更好,那么它只是更好的外壳吗?(示例也很好:)


@ Rodney Amato 和@ Vulcan Eager 提供了两个理由分别坚持bash和改用zsh。看来我必须对两者进行调查!那好吧:)

是否有人在辩论双方都有意见?


14
由于zsh(几乎)是bash的超集,因此您可以从迁移到zsh并像bash一样使用它开始。然后,您可以一次学习一点zsh gem。
orip

如果您对bash进行了一些自定义,并且经常在emacs中使用shell,那么这似乎并不简单。我张贴相关的问题:stackoverflow.com/questions/13326879/...
justingordon

唯一我不喜欢的zsh的是(至少在Ubuntu),你必须自己配置它的第一次启动它(而不是它提供了一些理智的默认值,你可以在以后鼓捣)。如果可以克服,zsh是最好的选择!
zrajm 2013年

Answers:


68

对于临时使用,您最好坚持使用bash并仅安装bash完成。

安装起来非常简单,请从http://www.caliban.org/bash/index.shtml#completion获取bash-completion-20060301.tar.gz 并解压缩

tar -xzvf bash-completion-20060301.tar.gz

然后使用以下命令将bash_completion / bash_completion文件复制到/ etc

sudo cp bash_completion/bash_completion /etc

这将提示您输入密码。您可能想要为任何其他完成脚本创建一个/etc/bash_completion.d目录(例如,我在那里有git完成脚本)。

完成此操作后,最后一步是确保主目录中的.bash_profile文件具有

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

在其中登录时加载完成文件。

要测试它,只需打开一个新的终端,然后尝试在cvs上完成操作,它应该在完成列表中显示cvs选项。


我尝试了上面的方法,但是之后每当我开始bash时,我都会遇到4个“期望一元运算符”和4个“参数过多”错误。
AnnanFay 2012年

12
如果您在OSX上使用自制软件,则可以运行brew install bash-completion
弥敦道(Nathan Villaescusa)

3
Bash-Completion2更好!在OS X上:brew tap homebrew/versions; brew install bash-completion2
Zearin 2014年

85

就个人而言,我喜欢zsh。

通常,您可能不会注意到它和bash之间的区别,除非您想快速进行递归glob之类的操作:

  • **/*.c 例如。

或使用后缀别名将特定编与不同的后缀相关联,以便您可以直接“执行”它们。使用下面的别名,您只需键入即可在提示符下“运行” C源文件,./my_program.c这将与您键入的完全一样vim ./my_program.c。(等价于双击文件图标。)

  • alias -s c=vim

或打印今天修改的文件名:

  • print *(e:age today now:)

您可能可以在bash中完成所有这些操作,但是我对zsh的经验是,如果我想做某事,我可能可以在zsh-lovers中找到它。我还发现《从Bash到Z-Shell》这本书非常有用。

玩弄大量选项的想法也很有趣!


1
这里的前两个示例对我没有任何意义(一个休闲的bash用户正在考虑切换到zsh)-您能详细说明“递归遍历”是什么意思,还是“将具有不同后缀的特定编关联”?
aaronsnoswell

5
@aaronsnoswell:“递归遍历”表示在子目录及其所有子目录中搜索名称与特定模式匹配的文件。Bash默认情况下不这样做;您find还是locate要进行递归搜索。但是,一旦让另一个程序进行搜索,您将失去名称之间的界限(除非您非常小心)以及访问shell的内部globing功能的权限,并且基本上必须与另一个程序提供的功能相匹配,或通过管道等的程序它的输出grepawksed(全部在自己的权利相当复杂)。
cHao

6
如今,您可以globstar在bash中设置该选项,以允许如上所述进行递归搜索。可以肯定的是,编写此答案时并非如此。
cHao

使用glob_star_shortin zsh,您现在可以做**.c,这被解释为**/*.c
PythonNut

我使用zsh 5.3并获得command not found: ageprint *(e:age today now:)
蒂莫

38

切换到zsh。您将有权访问:

  1. zmv:您可以:zmv '(*).mp3' '$1.wma'处理数千个文件。
  2. zcalc:非常舒适的计算器,优于bc
  3. zparseopts:用于分析给脚本提供的任意复杂选项的一类代码。
  4. autopushd:您始终可以popd在之后执行操作,cd以更改回之前的目录。
  5. 浮点支持。不时需要它。
  6. 哈希支持。有时它们只是一个关键功能。

17
zmv的示例应为zmv'(*)。mp3''$ 1.wma'。请更正它,这样粗心的介绍会使经验不足的人感到困惑和沮丧。
2013年

5
@TravisBear autoload zcalc; zcalc(尽管我自己python只要需要计算器就可以键入)。
2014年

9
“ autopushd:您总是可以在cd之后执行popd来回到以前的目录。” 这不只是cd-吗?
minhaz1 2014年

4
zmv并且zcalc开箱即用。不清楚zmv只是重命名文件;我认为您可能已经在转换格式。我什至不知道“散列”支持的含义。这篇文章似乎对已经了解zsh的人来说只是“有用”。
mpen 2014年

1
@Mark在这种情况下,“哈希”与“关联数组”同义。bash在此答案发布前的几个月,就发布了4。
chepner

13

如果您想使用ZSH更好地完成任务,则配置非常简单。将其放在您的〜/ .zshrc中:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

但是,值得检查ZSH的所有其他出色功能。上面的示例将为您提供非常简单的提示,并具有良好的完成效果。如果您不想摆弄配置,但是想看看ZSH可以为您做什么,请使用Google for“ zshrc”,您将可以使用一些配置开始使用。


3
这将为完成添加哪些内容?我不喜欢在不知不觉中随机添加内容。
mpen 2014年

6

zsh具有控制台gui配置的东西。您可以快速,轻松地进行设置,而无需摆弄配置文件。我认为您不需要花费很多时间来设置它,仅使用默认设置就可能需要10秒钟,所以请继续尝试一下。


10
您如何访问此“控制台gui”?
mpen 2014年

通常是在zsh没有任何相关点文件的情况下加载时看到的第一件事。要手动获取,请尝试autoload -U +X zsh-newuser-install; zsh-newuser-install -f
亚当·卡兹

3

Staale谈论的是类似程序(CUI)的向导,该向导在您首次运行zsh时会自动运行。只需回答一些问题,即可查看/更改默认值及其配置。

IBM developerWorks在zsh上拥有大量资源。

我没有使用过非常高级的功能,到目前为止,我还没有遇到过严重的差异,这些差异应该会妨碍来自bash的人。

一些例子:

  • !?pattern <Tab>将自动完成到历史记录匹配模式中的最后一条命令。很有用。

  • 您可以在RHS上配置提示。一种用途是在左侧保持固定宽度的提示,以便在将pwd(或任何宽度可变的内容)显示为右侧提示时,所有命令都能很好地对齐。

  • 您可以从多个文件重定向输入(但请尝试这样做):cat <file1 <file2 <file3

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.