【问题标题】:Worth switching to zsh for casual use? [closed]是否值得切换到 zsh 以供随意使用? [关闭]
【发布时间】:2010-09-07 18:49:05
【问题描述】:

Mac OS X 中的默认 shell 是 bash,我通常很乐意使用它。我只是认为这是理所当然的。不过,如果它能够自动完成更多内容,那就太好了,而且在这方面我听说过关于zsh 的好消息。但是我真的没有打算花几个小时摆弄设置来稍微提高我的命令行使用率,因为我在命令行上的生活并没有那么糟糕。

(据我了解,bash 也可以更巧妙地配置为自动完成。这是我不太热衷的配置。)

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


@Rodney Amato & @Vulcan Eager 给出两个很好的理由分别坚持bash和切换到zsh。看来我得调查这两个了!哦好吧:)

有人对争论的双方都有意见吗?

【问题讨论】:

  • 由于 zsh(几乎)是 bash 的超集,您可以从迁移到 zsh 开始,并像 bash 一样使用它。然后你可以一次一点地学习 zsh gems。
  • 如果您有一点 bash 自定义,并且经常在 emacs 中使用 shell,这似乎不是一件小事。我发布了相关问题:stackoverflow.com/questions/13326879/…
  • 我不喜欢 zsh 的唯一的一点是(至少在 Ubuntu 上)你必须在第一次启动它时自己配置它(而不是它提供一些理智的默认值,您以后可以修改)。如果你能克服它,zsh 是最好的!

标签: bash shell zsh


【解决方案1】:

zsh 有一个控制台 gui 配置的东西。您可以快速轻松地设置它,而无需摆弄配置文件。我认为您不需要太多时间来设置它,仅使用默认值可能需要 10 秒,所以继续尝试吧。

【讨论】:

  • 如何访问这个“控制台 gui”?
  • 当您在没有任何相关点文件的情况下加载zsh 时,通常会首先看到它。要手动获取,请尝试autoload -U +X zsh-newuser-install; zsh-newuser-install -f
【解决方案2】:

Staale 正在谈论一个类似向导的程序 (CUI),它会在您第一次运行 zsh 时自动运行。只需回答一些问题,查看/更改默认设置及其为您配置的设置。

IBM developerWorks 在 zsh 上有大量资源。

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

一些例子:

  • !?pattern 将自动完成 历史匹配中的最后一条命令 图案。很有用。

  • 您可以在 RHS。一种用途是保持固定 左侧的宽度提示 所以所有命令都很好地排列 显示密码(或任何 可变宽度)作为右手 侧面提示。

  • 您可以重定向来自多个文件的输入(尚未尝试此操作):cat

【讨论】:

    【解决方案3】:

    对于临时使用,您最好还是坚持使用 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 个“参数过多”的错误。
    • 如果你在 OSX 上使用自制软件,你可以运行 brew install bash-completion
    • Bash-Completion2 更好!在 OS X 上:brew tap homebrew/versions; brew install bash-completion2
    【解决方案4】:

    就个人而言,我喜欢 zsh。

    通常,您可能不会注意到它与 bash 之间的区别,直到您想快速执行诸如递归通配符之类的操作:

    • **/*.c 为例。

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

    • alias -s c=vim

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

    • print *(e:age today now:)

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

    玩转脑中的大量选项也很有趣!

    【讨论】:

    • 这里的前两个例子对我来说没有任何意义(一个临时的 bash 用户正在考虑切换到 zsh)——你能否详细说明“递归 globbing”是什么意思,或者你所说的“关联特定”是什么意思? progs 有不同的后缀”?
    • @aaronsnoswell:“递归通配”是指在子目录及其所有子目录中搜索名称与特定模式匹配的文件。 Bash 默认不这样做。你会 findlocate 递归搜索。但是一旦你让另一个程序进行搜索,你就会失去名称之间的界限(除非你很小心)以及访问 shell 的内部 globbing 能力,并且基本上不得不使用其他程序提供的东西,或通过grepawksed 之类的程序通过管道输出其输出(这些程序本身都相当复杂)。
    • 现在,您可以在 bash 中设置 globstar 选项以允许如上所述的递归搜索。不过,很确定在写这个答案时情况并非如此。
    • zsh 中使用glob_star_short,您现在可以执行**.c,它被解释为**/*.c
    • 我使用zsh 5.3 并得到command not found: ageprint *(e:age today now:)
    【解决方案5】:

    如果您只想使用 ZSH 更好地完成,那么配置非常简单。把它放在你的 ~/.zshrc 中:

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

    但是,值得一试 ZSH 的所有其他强大功能。上面的例子会给你一个非常简单的提示,并且完成度很好。如果你不想摆弄配置,但想看看 ZSH 能为你做什么,谷歌搜索“zshrc”,你会得到一些准备使用的配置以开始使用。

    【讨论】:

    • 这将为哪些事情添加补全?我不喜欢在不知道它在做什么的情况下随意添加东西。
    【解决方案6】:

    切换到 zsh。您将可以访问:

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

    【讨论】:

    • zmv 的示例应该是 zmv '(*).mp3' '$1.wma'。请纠正它,这种粗心的介绍可能会让没有经验的人感到困惑和沮丧。
    • @TravisBear autoload zcalc; zcalc(虽然我自己只要需要计算器就输入python)。
    • "autopushd: 你总是可以在 cd 之后执行 popd 来回到你之前的目录。"不就是相当于 cd - 吗?
    • zmvzcalc 不是开箱即用的。不清楚zmv 只是重命名文件;我以为你可能一直在转换格式。我什至不知道“哈希”支持是什么意思。这篇文章似乎只对已经了解 zsh 的人“有用”。
    • @Mark 在这种情况下,“哈希”是“关联数组”的同义词。 bash 4 在此答案发布前几个月发布。
    猜你喜欢
    • 2018-10-05
    • 2011-05-11
    • 2015-03-05
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多