在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命令将文件与文件描述符关联相关推荐

  1. linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...

    在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...

  2. Linux下使用ps命令查看某个进程文件的启动位置

    使用ps命令,使用方法如下: ps -ef|grep shutdown 其中shutdown为关机命令,但是此时查看到的只是相对路径,没有绝对路径,如: 其中4170就是进程ID,此时进入[/proc ...

  3. Linux下使用wc命令快速统计所有文件的行数

    语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  4. linux替换jar包目录,Linux下用jar命令替换war包中的文件【转】

    问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...

  5. linux替换jar的文件,Linux下用jar命令替换war包中的文件【转】

    问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...

  6. CentOS下的rm命令改造成移动文件至回收站

    将linux下的rm命令改造成移动文件至回收站 rm是Linux下文件删除的命令,它是Linux下非常强大却又非常危险的一条命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所有 ...

  7. Linux命令删除find,浅谈Linux下通过find命令进行rm文件删除的小技巧

    我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作 ...

  8. linux服务器mv文件,linux下使用mv命令移动文件到指定目录的方法

    linux下使用mv命令移动文件到指定目录的方法 发布时间:2020-10-30 10:01:25 来源:亿速云 阅读:83 作者:小新 这篇文章给大家分享的是有关linux下使用mv命令移动文件到指 ...

  9. linux将文件夹树状列出,Linux下用tree命令列出树形图

    命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...

最新文章

  1. 中文 Markdown 编写格式规范的命令行工具 lint-md
  2. Java - 正则表达式的运用(Pattern模式和Matcher匹配)
  3. 035 函数和代码复用小结
  4. 八、深入Go 编程语言接口
  5. 定了!这个专业研究生扩招,博士生待遇要提高!已有多所高校新增…
  6. php事务 面向对象,PHP面向对象之事务脚本模式(详解)
  7. 艾伟_转载:Cookie是什么?用法是怎样?与SESSION有什么区别?(二)
  8. C++ 版本 30:字符环
  9. 使用jxls模板解析导出数据时添加单元格样式
  10. html添加省市县联动下拉框,JSON+JS实现省市县三级联动下拉框
  11. 如何免费获取国外硕博学位论文全文资源
  12. Let us learn English confidently
  13. 鼠标滑轮将物体放大缩小
  14. Wise Duplicate Finder(重复文件查找工具)v1.2.9.40中文免费版
  15. 论EBS的并发请求(报表中心)的必要性
  16. 安装windows远程桌面服务器,如何安装应用,以便在 Windows Server 远程桌面服务中使用...
  17. 角色扮演类大型网络游戏C++后台和纯C语言后台的差异
  18. Centos7安装EDB/PPAS/EPAS
  19. IJCAI18 阿里妈妈广告
  20. TASSEL5中利用GLM模型进行GWAS分析

热门文章

  1. java的知识点运用_javaAPI的相关知识点的运用!
  2. cesium 原生抛物线
  3. java判断是否失效_java – 如何在输入有效之前检查无效输入和循环?
  4. linux cpu监控方案,Linux性能优化和监控系列(二)分析CPU性能
  5. python语法基础知识第四关第二题_【python基础语法】第4天作业练习题
  6. int 转换成 string 四种方法你们喜欢用那种呢?
  7. iis7 下php 环境配置文件,IIS7.X配置PHP运行环境小结_php
  8. python课程设计的主要任务是什么_Python网络编程课程设计 任务1.docx
  9. linux java 自启动_Linux设置开机启动脚本
  10. python实习内容过程_「Python实践」学习之路