Linux下使用exec命令将文件与文件描述符关联
在shell脚本下exec为系统自带的脚本命令,其作用是用来执行其他程序:
语法格式:
exec (选项)(参数)
选项:
-c:在当前环境下执行命令,即在当前shell脚本下执行,而不是打开一个新的shell
参数:
要执行的脚本
示列:
exec -c echo linux
输出:
linux
其效果与:
echo linux
是一样的,并且exec还可以用来指定文件描述符
首先要知道什么是文件描述符:
文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表。
当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。
在linux下我们可以手动指定文件描述符,无需让系统为我们指定,这里就要用到exec命令了:
exec 3<>hello.txt
这样3这个数字就会被视为文件描述符并与hello.txt文件关联,如果文件不存在则创建!
并且在关联之后3这个文件描述符就会被打开,我们可以对其进行读或者写:
//使用echo命令将"hello word"字符并使用重定向符号(<,>)重定向到文件描述符3中
echo "hello word">&3 #如果文件内容非空,则从头开始覆盖
注意如果持续写入的话,即会换行写入
比如:
echo "hello word">&3 #如果文件内容非空,则从头开始覆盖
echo "hello word">&3 #如果文件内容非空,则从头开始覆盖
echo "hello word">&3 #如果文件内容非空,则从头开始覆盖
则内容为:
hello word
hello word
hello word
并且在当前shell当前线程下可以使用多个文件描述符:
exec 1<>hello.txt
exec 2<>hello1.txt
//将hello1.txt里的内容读到hello.txt文件里
exec 1<&2
关闭读写:
exec 3>&- # 关闭写,禁止写,然而,实际上它也不能读了~
# 如果是exec 3<&-,关闭读,同时它也不能写了~
&-相当于关闭此描述符
要知道linux下一切皆文件,并且我们都知道标准I/O,这里终端屏幕上的标准输入输出文件描述符在linux下为100,这里我们可以让其重定向到文件里,这是linux已经创建了的文件描述符,并且用于描述终端屏幕上的输出I/O!
exec 1<>hello.txt
exec 100>&1
这样我们就使用重定向描述符将当前shell脚本,注意仅影响当前进程下的终端,Linux会以映射的方式将进程之间的共用描述符区分开,这样我们对它进行任何操作仅仅影响的是我们当前进程下的终端!
这样我们使用:
echo dd
会发现终端上并没有打印这行字,而是打印到hello.txt文件里去了!
注意,凡事任何会向输出I/O里输入任何数据都会被重定向到hello.txt文件里去了!
如果想让io恢复把它关闭即可恢复默认:
exec 100>&-
重定向输入:
exec 1<>dd.txt
exec 100<&1
这样我们使用cat命令将不再是将文本内容显示出来,而是从键盘接受数据并写入:
cat newfile
qqq
111
注意这里要说明一下IO文件描述符,IO只有一个文件,没有输入,输出两个文件,读即位输出,写即位输入,具体怎样重定向它还是看重定向描述符:<输入,>输出!
你会发现使用了此重定向,echo命令输出的文字也被写入到文件里去了,这里没有重定向输出呀!
答:
echo需要先将字符写入到IO文件里,然后在调用内核命令将IO文件里的内容输出到终端屏幕里,此时输入已经被重定向,所以echo输出的字符不会被显示而是被写入到重定向的输入文件里去了!
其实准确一点来说是没有输出的,因为输出只是将文件里的内容读取出来显示到指定区域里,所以c语言只定义了stdin输入缓冲区描述符,输入输出只是对缓冲区的可读性可写性更直观的表达而已!
对于输出缓冲区就拿dos窗口来说可以指定的,详细:输出缓冲区介绍
Linux下使用exec命令将文件与文件描述符关联相关推荐
- linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...
- Linux下使用ps命令查看某个进程文件的启动位置
使用ps命令,使用方法如下: ps -ef|grep shutdown 其中shutdown为关机命令,但是此时查看到的只是相对路径,没有绝对路径,如: 其中4170就是进程ID,此时进入[/proc ...
- Linux下使用wc命令快速统计所有文件的行数
语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
- linux替换jar包目录,Linux下用jar命令替换war包中的文件【转】
问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...
- linux替换jar的文件,Linux下用jar命令替换war包中的文件【转】
问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...
- CentOS下的rm命令改造成移动文件至回收站
将linux下的rm命令改造成移动文件至回收站 rm是Linux下文件删除的命令,它是Linux下非常强大却又非常危险的一条命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所有 ...
- Linux命令删除find,浅谈Linux下通过find命令进行rm文件删除的小技巧
我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作 ...
- linux服务器mv文件,linux下使用mv命令移动文件到指定目录的方法
linux下使用mv命令移动文件到指定目录的方法 发布时间:2020-10-30 10:01:25 来源:亿速云 阅读:83 作者:小新 这篇文章给大家分享的是有关linux下使用mv命令移动文件到指 ...
- linux将文件夹树状列出,Linux下用tree命令列出树形图
命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...
最新文章
- 中文 Markdown 编写格式规范的命令行工具 lint-md
- Java - 正则表达式的运用(Pattern模式和Matcher匹配)
- 035 函数和代码复用小结
- 八、深入Go 编程语言接口
- 定了!这个专业研究生扩招,博士生待遇要提高!已有多所高校新增…
- php事务 面向对象,PHP面向对象之事务脚本模式(详解)
- 艾伟_转载:Cookie是什么?用法是怎样?与SESSION有什么区别?(二)
- C++ 版本 30:字符环
- 使用jxls模板解析导出数据时添加单元格样式
- html添加省市县联动下拉框,JSON+JS实现省市县三级联动下拉框
- 如何免费获取国外硕博学位论文全文资源
- Let us learn English confidently
- 鼠标滑轮将物体放大缩小
- Wise Duplicate Finder(重复文件查找工具)v1.2.9.40中文免费版
- 论EBS的并发请求(报表中心)的必要性
- 安装windows远程桌面服务器,如何安装应用,以便在 Windows Server 远程桌面服务中使用...
- 角色扮演类大型网络游戏C++后台和纯C语言后台的差异
- Centos7安装EDB/PPAS/EPAS
- IJCAI18 阿里妈妈广告
- TASSEL5中利用GLM模型进行GWAS分析
热门文章
- java的知识点运用_javaAPI的相关知识点的运用!
- cesium 原生抛物线
- java判断是否失效_java – 如何在输入有效之前检查无效输入和循环?
- linux cpu监控方案,Linux性能优化和监控系列(二)分析CPU性能
- python语法基础知识第四关第二题_【python基础语法】第4天作业练习题
- int 转换成 string 四种方法你们喜欢用那种呢?
- iis7 下php 环境配置文件,IIS7.X配置PHP运行环境小结_php
- python课程设计的主要任务是什么_Python网络编程课程设计 任务1.docx
- linux java 自启动_Linux设置开机启动脚本
- python实习内容过程_「Python实践」学习之路