Unix shell 有类型吗?

Unix shell 有类型吗?

我发现有像nologinfalse、 和 之类的外壳true。还有什么?

我不知道用于列出 shell 的正确关键字是什么。每当我使用关键字 进行搜索时,我都会在说明、、和其他关键字linux shell types之间的差异的上下文中获得结果。bashcshzsh

用于查找有关该主题的更多信息的正确关键字是什么?

答案1

nologin、false 和 true 不是 shell,它们只是阻止登录的方法。这留下了以 . 结尾的内容sh。因此,搜索/bin/usr/bin等将有助于找到大多数已安装的内容。

那么就出现了“什么是shell?”的问题。 python、purl、tcl等是shell吗?或许不是,但是分界线在哪里?由于truefalse、 和nologindo 不是解释器(不接受用户输入,不是语言等),那么它们是确实在线的非外壳一侧。

然而,登录 shell 不一定是 shell,甚至不必是交互式的。

您可以使用您最喜欢的搜索引擎在互联网上搜索 Unix shell。

答案2

我发现shell有nologin、false、true之类的。还有什么?

这些不是贝壳,因为@ctrl-alt-delor 已经指出

我不知道该输入什么来列出 shell。

您无法获得所有存在的 shell 的详尽列表。这就像要求提供所有现有软件的列表。

每当我使用 linux shell 类型(及类似类型)进行搜索时,我都会在说明 bash、csh、zsh 和您知道的其他 shell 类型之间差异的上下文中获得结果。

这真的很方便,因为这些是流行的贝壳你很可能会遇到。

使用什么关键字来了解有关该主题的更多信息?

“外壳”有时也称为“REPL”、“命令行解释器”或“命令语言解释器”。

答案3

这是一个答案很复杂的问题。大多数人所说的“外壳”是读取-求值-打印循环因此,即使是 python 解释器也是一个 shell,只要您以交互方式运行 python。然而,这意味着 nologin 不是真正的 shell!那么什么是壳呢?

从技术上讲,任何程序都可以用作外壳。事实上,这里有一些我使用不寻常的贝壳的照片:

  1. Python shell 作为登录 shell
  2. 纳米作为外壳(尽管你无法区分它是否正常运行,因为它是全屏的)
  3. 猫像贝壳一样奔跑
  4. 顶层作为shell运行(即使你再一次看不到它是一个外壳)
  5. 还有一个 Hello World 程序!

然而,这并不是您期望的作为 shell 运行的内容。通常,您需要运行/etc/shells.例如,我的包含:

# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen

没有我之前提到的贝壳!那么他们为什么要跑呢?

简而言之,他们确实这样做,但仅限于本地。如果您查看 的shells联机帮助页man shells,您会发现它/etc/shells主要由 FTP 守护程序等程序使用。这就是为什么您nologin在 中看不到shell 的原因/etc/shells:它通过不存在来阻止登录 FTP 和其他非登录守护进程,同时通过是一个简单的printf("This account is currently not available");程序而不是 REPL 来阻止本地登录。

所以,回答你的问题:只有一种类型的 shell,那就是可执行的。如果你可以运行一个程序,那么它就是一个 shell。

答案4

任何你想要的。

shell 只是一个 TTY 应用程序。所以任何可以在 TTY 上运行的东西都可以是 shell。

非常规 shell 的一个例子是公告板服务:用户通过 ssh 或 telnet 登录并获得 BB,而不是命令行

相关内容