我读过很多文章,说 FreeBSD 中的官方 shell 是tcsh
,而 Debian 中的官方 shell 是dash
.然而,当我echo $shell
(FreeBSD)或env
在 Debian 中时,它说 shell 是csh
第一种情况,或bash
在 Debian 中。
这是全新安装的情况。我在root账户和普通用户账户下进行了测试。另外,当我在 FreeBSD 中创建一个新帐户时,我可以选择 3 个 shell;sh
,csh
或者tcsh
。如果我不做选择,csh
则为帐户的默认值。
这些系统下的官方标准 shell 是什么?是它tcsh
还是csh
在 FreeBSD 中?是在 Debian 中dash
还是bash
在 Debian 中?
是我做错了什么吗?或者这些文章和网站是否存在误导?
我想学习两种 shell:一种用于 Debian,一种用于 FreeBSD,但我找不到应该学习哪一种,因为不清楚哪一种是官方 shell。
另外,在搜索我应该学习哪个 shell 时,我发现了这个:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/
是只是不喜欢的人csh
,还是我们真的应该避免csh
?
我正在使用最新的 Debian 和 FreeBSD 版本。
我开始迷失所有这些 shell 选项,它们对我来说看起来都一样(除了语法;我的意思是它们看起来都提供相同的可能性)。这就是为什么我想学习官方的。
答案1
您根本不需要使用给定系统的默认 shell。 Debian 和 FreeBSD 都提供了许多不同的 shell,并且大多数或全部 shell 都可以在两者上使用,或者是预安装的,或者是易于安装的。
注意命名。/bin/csh
真正的 tcsh、/bin/sh
bash 或 ksh并不罕见。
sh
,Bourne shell,是最古老且仍在普遍使用的 Unix shell。 bash
可能是使用最广泛的 sh 衍生物;ksh
并且zsh
也很普遍。
csh
,C shell,是由 Bill Joy 为 BSD 开发的。它具有一些比sh
(或至少比sh
当时存在的旧版本) 更方便的交互使用功能。tcsh
源自csh
,并添加了很多新功能,其中大部分旨在交互使用。正如您通过阅读所看到的csh.whynot、csh 和 tcsh 在使用它们进行脚本编写而不是交互时存在一些问题。
就我个人而言,我从 csh 开始,然后在 tcsh 可用时切换到 tcsh。我现在很少使用 csh 来编写脚本,更喜欢使用 sh 或 bash(或者 Perl 来处理相当复杂的事情)。
(几年后更新:我已经放弃了 tcsh,现在交互地使用 bash。)
我的建议是选择一个 shell 并很好地学习它,在 FreeBSD 和 Debian 上使用它。如果你选择 tcsh,我想你必须在 Debian 上安装它:sudo apt-get install tcsh
。如果你选择bash,我不知道FreeBSD上是否预装了它;如果不是,安装也应该同样简单。
没有必要以交互方式使用相同的 shell 并用于编写脚本,但它可以避免一些混乱并缩短学习曲线。
ksh 可能与 bash 一样强大,而 zsh 甚至更强大(并且有很多我从未花时间学习的功能)。
我建议使用 bash,适用于 FreeBSD 和 Debian(以及您可能使用的任何其他类 Unix 系统),以及交互式使用和脚本编写。但其他选择是完全合理的,有些可能更适合您。