Bash shell 重定向

最近在看代码的时候看到了很多关于shell重定向的使用,所以特地学习了官方Bash手册,并结合一个网友的博客,在此将内容总结整理一下。


一、shell指令执行的顺序

bash启动的时候会默认打开3个文件描述符,当它运行一条指令的时候,会先fork一个子进程,子进程会继承这3个文件描述符,然后设定好重定向之后,再执行指令。严格按照这个顺序会很容易理解重定向。


需要注意的几点是:

  1. 如果指令中有多个重定向,重定向的顺序是很关键的,因为重定向是按照从左向右解析的。

  2. 如果只有一个重定向的话,那么它在指令的位置可以任意,因为bash是先解析重定向,然后将重定向从指令中去除以后再执行指令。

  3. 重定向符号如果以‘<’开头,是指对标准输入(fd= 0)进行重定向;如果是以'>'开头,则是对标准输出(fd= 1)重定向,这点后面还会继续强调。

  4. 下面所有列举的重定向格式中的 word 除特意指明以外,都是指各种扩展之后的效果,本文只针对重定向,这些扩展具体可以查看bash的参考手册,在这里我们就使用不带任何扩展、最简单的文件名来说明。

重定向就是针对文件描述符的操作,理解到这一点,重定向也就不难了。


二、输入重定向(Redirecting Input

格式:[n]<word

说明:将文件描述符n重定向到word指代的文件(以读的方式打开),如果n省略(第3个注意项),则是将标准输入重定向。

举例:

$ cat < file	 # 等价于cat 0<file

子进程的shell在继承3个文件描述符以后,解析到重定向符号‘<',然后将标准输入重定向到file,之后执行cat指令,cat指令从标准输入读取数据,标准输入由于已定向到file,所以就转而从file中读取输入内容。


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值