我正在实现一个模拟Linux shell的程序,我需要实现具有多个管道的表达式 - 但我不确定什么是合法的或如何处理一些事情,例如:
答案 0 :(得分:1)
没有单个 Linux shell(但有几个shell)。最常见的是GNU bash,但您可以使用其他类似zsh(我以交互方式使用)或fish,甚至是scsh - 或{{3} } - 它的语法完全不同。并且它们都没有完全相同的语法,也没有报告相同的错误。
管道的格式为:
[!] command1 [ | command2 ...]
command1的标准输出应连接到command2的标准输入。
如您所见,您无法使用|
结束命令。
当输入不完整的行时,您的交互式bash shell会发出不同的提示。它使用POSIX shell specification库进行交互式可编辑输入(和完成)。
我在Linux上认识的所有shell都是GNU readline,因此您可以研究它们的源代码。 free software是一个非常简单的shell,其代码非常易读(但有点儿错误);它缺乏大多数复杂壳体的互动设施(特别是sash
)。
在编写自己的shell之前,您需要了解大部分auto-completion ...
对于家庭作业,您可能会在第一次遇到错误时给出错误消息。