【问题标题】:A better Linux shell? [closed]更好的 Linux shell? [关闭]
【发布时间】:2009-06-01 03:22:31
【问题描述】:

我使用 bash,并且已经使用了十多年 - 但偶尔我想知道 Linux shell 世界是否有任何重大的新发展。

几年前微软发布了 PowerShell,这看起来很有趣。 Linux shell 中是否有任何类似的创新?

【问题讨论】:

  • 您在 bash 中错过了哪些功能,而在您认为具有创新性的其他 shell 中提供了哪些功能?更重要的是,您是否看到了您认为有助于 bash 完成其编写目的的功能?例如。从我的角度来看 bash 是一个访问操作系统资源的命令行界面,从这个角度来看你缺少什么功能?
  • 也许这是一种保持 Unix 哲学的方式,即使用可以很好地完成特定任务的小型工具(而不是那些无法完成所有事情的大型工具)。
  • 这是一罐蠕虫..小心打开它..
  • 致第二个 stefanB:最有经验的 unix shell 用户可能没有 Powershell...告诉我们你喜欢什么。

标签: linux bash shell powershell


【解决方案1】:

您是否意识到 bash 4 最近发布了许多新功能和语言添加?

  • Shell 选项globstar (**/foo) 进行递归搜索,dirspell 修复路径名扩展期间的拼写错误。
  • 关联数组,将字符串映射到字符串,而不仅仅是数字到字符串。
  • autocd shell 选项允许通过键入目录路径来更改目录,而不必将cd 放在前面。
  • 协同进程
  • &>>|& 重定向运算符同时重定向 stdoutstderr
  • 对现有内置函数的大量添加以提高脚本编写的便利性。

退房:

【讨论】:

    【解决方案2】:

    我会看看 zsh 或 fishshell。

    【讨论】:

    • 关于 zsh 和 fishshell 的一个注意事项是我们不允许在工作中使用它们。而且我似乎并不孤单。因此,尽管它们很好,但它们在工作场所不如 bash 有价值,除非您可以自己选择。
    • 似乎换壳很容易。您不必将其作为登录 shell,您只需在登录后运行它即可。
    【解决方案3】:

    Bash(和其他几个 shell)最不被吹捧的特性之一是能够编写自己的可加载项,并让 shell 作为内置程序运行它们。

    假设您编写了可加载的“on”......并且您希望它像这样工作:

    on node 123 run some command
    on class nodes run some command
    on all nodes run some command
    

    ...等等..

    您可以按照简单的示例来了解如何编写可加载文件,然后通过 enable -f /path/to/loadable loadable_name 将其作为内置 bash 启用

    所以在我们的例子中,启用 -f /opt/bash/loadables/on on

    ... 在你的 bashrc 中,你已经得到它了。

    所以,如果你想让 bash 原生地解释你漂亮的新语言,你可以编写一个名为 'use' 或 'switch_to' 的可加载文件,然后在设置了某个环境变量的情况下修改解析器以加载不同的语法/运行时.

    即:

    #/bin/bash
    
    switch_to my-way-cool-language
    
    funkyfunc Zippy(int p) [[
       jive.wassup(p) ]]
    

    然而,大多数人不会想要破解他们的外壳。我确实想指出,有一些工具可以使用 Bash 并按照您想要的方式进行操作,而无需过多地摆弄核心代码。

    请参阅 /path-to-bash-source/examples/loadables,因为您仍在使用 Bash,所以您也许可以让它飞到您工作的地方。

    【讨论】:

    • René Rebe 的Lua Bash 就是一个很好的例子,它定义了一个内置的luabash 执行Lua,以及一些用于添加更多内置的基础设施等。 example 提供了一些关于正在发生的事情的想法。
    • @Charles - 这确实是一个很好的例子!
    【解决方案4】:

    您可以通过Pash 在 Linux 上运行 PowerShell。它使用 Mono 就像 PowerShell 使用 .NET 一样。

    【讨论】:

      【解决方案5】:

      我认为“原始改进外壳”是 ksh93。 bash 出现在 ksh 源代码是专有的时候;如果 ksh 那时是开源的,那么可能认为没有必要拥有一个新的 shell(尽管你永远不知道 FSF)。 ksh 值得研究,尤其是它能够通过 C 模块进行扩展,但它并没有明显战胜 bash。 bash 的自动补全显然更胜一筹,这可能足以让 bash 整体获胜。无论如何 bash 和 ksh 已经为收敛做出了巨大的努力,因此差异很小。

      另一个有趣的 shell 是 zsh,它试图成为 ksh 的一切,同时也包括 csh。由于我从未看到 csh 的任何意义或用途,因此我不是提倡 zsh 的合适人选。我将指出一个不寻常的不兼容性:默认情况下,在 zsh 中,变量 $var always 扩展为单个标记,即使它包含空格。这种行为与所有其他 sh 派生的 shell 不兼容,并且偶尔会带来不便,但实际上它比原来的更有意义,并且节省了大量的引用。

      csh 是第一个具有作业控制功能的 shell,但在我看来,它(及其后继者)已被 bash 和 ksh 取代。写脚本从来都不是很有趣。

      最后,还有许多专为救援软盘 (!) 和其他 Spartan 环境设计的小外壳,但听起来您对这些没有什么兴趣。

      (在创新的问题上,我应该补充一点,我以前编写的 shell 脚本的一半以上现在是 Lua 脚本。其他人可能对 Python 或 Ruby 说同样的话,或者回到过去,Perl或 Tcl。所以我认为真正的创新是从 shell 迁移到命令行的可编程交互。)

      【讨论】:

      • ksh(或 pdksh)非常容易破解,实际上您可以将它链接到 bash 使用的同一个行编辑器和自动完成库。您不会得到 POSIX 之外的所有 GNU 扩展(即 bash 4.0 中的关联数组)。使用任何 shell,都可以轻松切换解析器/语法以在命令行上使用现代语言。如果你在谷歌上搜索“蓝色编程语言”,你会发现进入 bash 是多么容易。
      【解决方案6】:

      IIRC,Powershell 是面向对象的,而大多数 unix shell 和实用程序都对文本进行操作。在这方面,Squirrel Shell 可能会让您感兴趣。不过我没用过。

      【讨论】:

        【解决方案7】:

        如果您愿意失去 sh 的兼容性,您可以考虑使用 Python 或 Tcl 等脚本语言作为您的 shell。如果解释器不提供行编辑、命令历史记录、补全等功能,rlwrap 会非常方便。

        关于 shell 的一个理念是,它们应该主要仅用于将进程与文件连接 (here is one page that espouses that approach)。也就是说,人们已经使用它们编写了一些非常复杂的软件。

        【讨论】:

          【解决方案8】:

          Shell 并没有比 Scheme Schell 更具创新性。 Scheme 的所有功能都结合了运行 Unix 命令的能力一个嵌入式 awk 解释器(当然是用 Scheme 编写的)。唯一的缺点是它需要一点点patching 才能在 64 位 Linux 上构建。

          它不完全是 Bourne-shell,但它是不同的。当然,你必须学习 Scheme - 奖金!

          【讨论】:

            【解决方案9】:

            如果你喜欢 ruby​​,你可以使用 rush(ruby-unix shell,不是 irb)

            在此处查看演示文稿

            http://www.slideshare.net/adamwiggins/rush-the-ruby-shell-and-unix-integration-library

            或官网查看更多示例

            http://rush.heroku.com/

            【讨论】:

              猜你喜欢
              • 2010-09-05
              • 1970-01-01
              • 1970-01-01
              • 2010-10-17
              • 2015-07-09
              • 2015-04-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多