csh tcsh 和 bash 的故事

IC界最常用的 shell 脚本是 csh,好多时候建立仿真环境都是要 source 一个 csh 文件,或者是修改自己的 cshrc 配置文件 .cshrc ,以便打开的默认终端就有正确的配置。不过 csh 现在已经基本被他的继承者 tcsh 取代,通过下面的方式可以看出来,我的机器上 csh 其实是被链接到了 tcsh。

% ls -la /bin/csh
lrwxrwxrwx. 1 root root 4 Sep 21  2022 /bin/csh -> tcsh*

那么linux世界最常见的 bash 跟这父子俩又有什么不同呢,这里有一个回答我认为挺不错,翻译到下面:

bash和tcsh在很多方面都是不同的,而且适合做不同的事情。首先介绍一下历史。

起初只有 “sh”,即 “Bourne Shell”。它被写成可以很好地进行脚本编写,但对于与用户的>交互,它 还有很多不足之处。

然后,有人提出了 “csh”,即C-shell,它有更好的工作控制和几个不同的语法,通常使它更>适合于 交互使用。有些人用 "csh "做脚本,但大多数人意识到它在这方面很糟糕,所以他们>用 "csh "做交 互式外壳,用 "sh "做脚本。这有点麻烦,因为你必须记住两种不同的语法,>但事情就是这样的。

后来出现了 “ksh”,它是 “sh”,但对脚本来说稍微好一点,对交互式使用来说好得多,可能>和 " csh "一样好。

然后出现了’tcsh’,它在交互式使用的能力上有了很大的飞跃。这继续了这种分裂。sh "或 >"ksh " 用于脚本,"tcsh "用于交互式。

然后出现了 “bash”。它吸收了几乎所有有利于与用户交互的功能,并保留了所有有利于编程>的功能。
今天’bash’被广泛接受,可能是有史以来使用最多的shell,而’tcsh’只被少数人使用,大>多数人喜 欢C-shell语法和’tcsh’的所有附加功能。它仍然是一个很好的shell(我把它作为>我的默认shell使 用了10多年),但是’bash’在交互式使用方面同样好,在编程方面更好,所>以大多数人只是把它用于这 两方面,而不必记住两种语法风格。

至于两者真正不同的地方,你必须使用一段时间才能看到所有的东西。它们使用不同的for/>foreach循环的语法。以不同的方式设置命令行提示符。别名的处理方式不同。它们在启动时>读取不同的配置文件。

另一个回答里有人说

当你考虑使用 tcsh(或者它的祖先csh)时,你就处于一个有点小众的位置了。在EDA(电子设计自动化)领域,经常可以看到csh脚本。但这是一个历史的意外,在该领域工作的大多数人都不使用tcsh作为他们的交互式使用。

看起来 csh 作为IC界的默认 shell 仅仅是历史原因,并不是它有多么合适?

1 个赞