我使用bash,已经这样做了十多年 - 但偶尔我想知道Linux shell世界是否有任何重大的新发展.
几年前,微软发布了PowerShell,这看起来非常有趣.Linux shell中是否有类似的创新?
您是否意识到bash 4
最近发布了大量新功能和语言新增功能?
Shell options globstar
(**/foo
)执行递归搜索,dirspell
修复路径名扩展期间的拼写错误.
关联数组,将字符串映射到字符串,而不仅仅是数字到字符串.
该autocd
外壳选项允许通过只输入的目录路径,而不必把更改目录cd
在前面.
协进程
&>>
和|&
重定向运算符重定向stdout
和stderr
对现有内置程序的大量添加,以提高脚本编写的便利性.
查看:
"官方"更改日志: http://tiswww.case.edu/php/chet/bash/CHANGES
一些新功能的简短指南: http://bash-hackers.org/wiki/doku.php/bash4
我看看zsh或fishshell.
Bash(和其他一些shell)最不受欢迎的功能之一是能够编写自己的可加载项,并让shell将它们作为内置运行.
让我们说你写了可加载'打开'..你希望它像这样工作:
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
...在你的bashrc中,你已经知道了.
因此,如果您希望bash本地解释您的spiffy新语言,您可以编写一个名为'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.
我认为"原始改进的外壳"是ksh93.bash是在ksh源代码专有的时候出现的; 如果ksh当时是开源的,那么可能没有必要设置一个新的shell(尽管有FSF你从来不知道).ksh值得研究,特别是因为它能够通过C模块扩展,但它并不是对bash的明确胜利.bash的自动完成显然是优越的,这可能足以让bash成为一个全面的胜利.在任何情况下,bash和ksh都付出了很大的努力来收敛,所以差异很小.
另一个有趣的shell是zsh,它试图成为ksh所有的东西,同时也包括csh.由于我从来没有看到任何观点或使用csh,我不是倡导zsh的合适人选.我将指出一个不寻常的不兼容性:默认情况下,在zsh中,变量$var
总是扩展为单个标记,即使它包含空格.这种行为与所有其他sh派生的shell不兼容,并且它偶尔会带来不便,但实际上它比原版更有意义,并且它节省了大量的引用.
csh是第一个拥有工作控制权的shell,但在我看来它(以及它的继承者)已经被bash和ksh所取代.编写脚本从来都不是很有趣.
最后,有许多微型外壳设计用于救援软盘(!)和其他Spartan环境,但听起来你对它们没什么兴趣.
(在创新方面,我应该补充一点,我以前用来编写shell脚本的脚本中有一半以上是Lua脚本.其他人可以对Python或Ruby说同样的话,或者说白天,Perl或Tcl.所以我认为真正的创新是从命令行的可编程交互中移出shell.)
您可以通过Pash在Linux上运行PowerShell .它以PowerShell使用.NET的方式使用Mono.