Linux shell管道语法

时间:2015-12-26 16:35:58

标签: c linux bash shell

我正在实现一个模拟Linux shell的程序,我需要实现具有多个管道的表达式 - 但我不确定什么是合法的或如何处理一些事情,例如:

  • 管道是合法命令中的最后一个字符吗?当我在Linux shell中尝试它时,它显示出非常奇怪的行为 - 按下回车后它会显示一个带有>的新行。在一开始的时候。我不确定这对于命令的合法性意味着什么?
  • 如何处理几个连续的管道?例如ls -l ||||| grep 7 似乎外壳像往常一样工作,忽略了多余的管道,但我确信。想要一些帮助。

1 个答案:

答案 0 :(得分:1)

没有单个 Linux shell(但有几个shell)。最常见的是GNU bash,但您可以使用其他类似zsh(我以交互方式使用)或fish,甚至是scsh - 或{{3} } - 它的语法完全不同。并且它们都没有完全相同的语法,也没有报告相同的错误。

但是有一个标准es定义了POSIX(作为英文技术文档):

  

管道的格式为:

[!] command1 [ | command2 ...]
     

command1的标准输出应连接到command2的标准输入。

如您所见,您无法使用|结束命令。

当输入不完整的行时,您的交互式bash shell会发出不同的提示。它使用POSIX shell specification库进行交互式可编辑输入(和完成)。

我在Linux上认识的所有shell都是GNU readline,因此您可以研究它们的源代码。 free software是一个非常简单的shell,其代码非常易读(但有点儿错误);它缺乏大多数复杂壳体的互动设施(特别是sash)。

在编写自己的shell之前,您需要了解大部分auto-completion ...

对于家庭作业,您可能会在第一次遇到错误时给出错误消息。