首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理命令行?

如何处理命令行?
EN

Unix & Linux用户
提问于 2016-04-28 03:24:26
回答 1查看 918关注 0票数 1

来自用Newham学习Bash Shell

shell从标准输入或脚本中读取的每一行代码都被称为管道;它包含一个或多个命令,由零个或多个管道字符(X)分隔。对于它读取的每个管道,shell将其分解为命令,为管道设置I/O,然后对每个命令执行以下操作(图7-1):

  1. 将命令拆分为由固定的元字符集分隔的标记: SPACE、TAB、NEWLINE、;、(、)、<、>、\\和&。标记类型包括单词、关键字、I/O重定向器和分号。
  2. 在shell将管道分解为由|分隔的命令之后,为什么|仍然被列为元字符,在每个命令中分离标记?|可以出现在每个命令中吗?
  3. Bash手册指出,当bash shell运行管道时,它会分叉子shell来运行管道中的每个命令。对于管道中的每个命令,哪个shell“对每个命令执行以下操作”:为命令分叉的子shell还是原始shell?
EN

回答 1

Unix & Linux用户

发布于 2016-04-28 10:18:42

  • 管道字符|是一个元字符,因为它结束了一个没有引用的单词。这是使shell语言易于理解所必需的。
  • shells为管道创建各种进程的方式是不标准化的,不同的实现也不同。

Bourne最初确实创建了一个sub-shell,然后成为管道所有进程的父进程,并最终启动管道中最右边的程序。这个方法比其他方法需要更少的代码,并且允许实现简单的作业控制。

巴什以类似的方式工作。

Ksh93使管道中的每个进程都成为原始shell的直接子进程。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/279644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档