gpt4 book ai didi

c - Linux shell 管道语法

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:22 24 4
gpt4 key购买 nike

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

  • 管道作为命令中的最后一个字符是否合法?当我在 Linux shell 中尝试它时,它显示出非常奇怪的行为 - 在按下 enter 后,它显示了一个开头为 > 的新行。我不确定这对命令的合法性意味着什么?
  • 如何处理多个连续的管道?例如 ls -l ||||| grep 7看起来 shell 就像往常一样工作并且忽略了多余的管道,但我很确定。需要一些帮助。

最佳答案

没有单个 Linux shell(而是多个shell)。最常见的是 GNU bash , 但你可以使用其他的,比如 zsh (我正在交互式使用)或 fish ,甚至 scsh - 或 es - 它有一个完全不同的语法。而且它们都不会共享完全相同的语法并且不会报告相同的错误。

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

The format for a pipeline is:

[!] command1 [ | command2 ...]

The standard output of command1 shall be connected to the standard input of command2.

如您所见,您不能以 | 结束命令。

当输入不完整的行时,您的交互式 bash shell 会给出不同的提示。它正在使用 GNU readline用于交互式可编辑输入(和完成)的库。

我所知道的 Linux 上的所有 shell 都是 free software , 所以你可以研究他们的源代码。 sash是一个非常简单的 shell,其代码可读性很强(但有点错误);它缺少更复杂 shell 的大部分交互功能(特别是 auto-completion )。

您需要了解 Advanced Linux Programming 的大部分内容在编写自己的 shell 之前...

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

关于c - Linux shell 管道语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com