@linux中exec操作文件描述符及文件重定向

1|0exec操作文件描述符

exec命令可以用来替代当前shell;
换句话说,并没有启动子shell,使用这一命令时任何环境都将被清除,并重新启动一个shell

linux默认文件描述符:
每打开一个shell就会打开默认的三个文件描述符描0,1,2分别代表【标准输入】和【标准输出】及【标准错误输出

1|1一、exec的基本形式

描述exec命令最贴切通俗的说法是:它践踏了你当前的shell

linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件

exec command 其中,command通常是一个shell脚本 当这个脚本结束了,相应的会话可能也就结束了。 但是,exec在对文件描述符进行操作的时候(也只有在这个时候),它不会覆盖你当前的shell

1|2二、案例

1|01、基础命令

1)# exec 3</tmp/1.txt //以“只读方式”打开/tmp/1.txt,文件描述符对应为3 2)# exec 3>/tmp/1.txt //以“只写方式”打开/tmp/1.txt,文件描述符对应为3 3)# exec 3<>/tmp/1.txt //以“读写方式”打开/tmp/1.txt,文件描述符对应为3 4)# exec 3<&- //关闭文件描述符3

1|02、脚本测试

#脚本测试 #!/bin/bash exec 4>&1 #用4记录标准输出 exec 1>/tmp/abc #重定向标准输出 echo "123" echo "456" exec 1>&4 #恢复标准输出 exec 4>&- #关闭4 (运行此脚本,脚本中的echo输出会输出到/tmp/abc文件中,脚本第二行用4>&1 是为了记录标准输出的文件描述符便于执行完毕后恢复标准输出,恢复标准输出也可以用exec 1>/dev/tty) #注: echo "hello" >&4 向文件描述符中输入内容只使用 > 不能用 >> ,此时的 > 不会清空文件,是否清空文件需要在exec命令关联文件描述符到文件的时候区别使用 > 或 >> #例如下脚本: #!/bin/bash exec 4>/tmp/abc echo "123" >&4 echo "456" >&4 exec 4>&- 则每次执行完脚本后/tmp/abc文件内容都是123\n456,若把第二行换成exec 4>>/tmp/abc则会追加进去(文件的清空操作是在exec命令的操作时进行的)

1|3三、常见的文件(重定向)

command(命令)> filename(文件名称) #把标准输出重定向到一个新文件中 command >> filename #把标准输出重定向到一个文件中(追加) command 1 > fielname #把标准输出重定向到一个文件中 command > filename 2>&1 #把标准输出和标准错误一起重定向到一个文件中 command 2 > filename #把标准错误重定向到一个文件中 command 2 >> filename #把标准输出重定向到一个文件中(追加) command >> filename 2>&1 #把标准输出和标准错误一起重定向到一个文件中(追加) command < filename >filename2 #把command命令以filename文件作为标准输入,以filename2文件作为标准输出 command < filename #把command命令以filename文件作为标准输入 command << delimiter #把从标准输入中读入,直至遇到delimiter分界符 command <&m #把文件描述符m作为标准输入 command >&m #把标准输出重定向到文件描述符m中 command &m<&- #关闭文件描述符m

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121509.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示