exec 是 Shell 内置命令,它有两种用法,一种是执行 Shell 命令,一种是操作文件描述符。本节只讲解后面一种,前面一种请大家自行学习
使用 exec 命令可以永久性地重定向,后续命令的输入输出方向也被确定了,直到再次遇到 exec 命令才会改变重定向的方向;换句话说,一次重定向,永久有效。
嗯?什么意思?难道说我们以前使用的重定向都是临时的吗?是的!前面使用的重定向都是临时的,它们只对当前的命令有效,对后面的命令无效。
请看下面的例子:
[mozhiyan@localhost ~]$ echo “c.biancheng.net” > log.txt
[mozhiyan@localhost ~]$ echo “C语言中文网”
C语言中文网
[mozhiyan@localhost ~]$ cat log.txt
c.biancheng.net
第一个 echo 命令使用了重定向,将内容输出到 log.txt 文件;第二个 echo 命令没有再次使用重定向,内容就直接输出到显示器上了。很明显,重定向只对第一个 echo 有效,对第二个 echo 无效。
有些脚本文件的输出内容很多,我们不希望直接输出到显示器上,或者我们需要把输出内容备份到文件中,方便以后检索,按照以前的思路,必须在每个命令后面都使用一次重定向,写起来非常麻烦。如果以后想修改重定向的方向,那工作量也是不小的。
exec 命令就是为解决这种困境而生的,它可以让重定向对当前 Shell 进程中的所有命令有效,它的用法为:

exec 文件描述符操作
在《结合Linux文件描述符谈重定向,彻底理解重定向的本质》一节讲到的所有对文件描述符的操作方式 exec 都支持,请看下面的例子:
[mozhiyan@localhost ~]$ echo “重定向未发生”
重定向未发生
[mozhiyan@localhost ~]$ exec >log.txt
[mozhiyan@localhost ~]$ echo “c.biancheng.net”
[mozhiyan@localhost ~]$ echo “C语言中文网”
[mozhiyan@localhost ~]$ exec >&2
[mozhiyan@localhost ~]$ echo “重定向已恢复”
重定向已恢复
[mozhiyan@localhost ~]$ cat log.txt
c.biancheng.net
C语言中文网
对代码的说明:
exec >log.txt将当前 Shell 进程的所有标准输出重定向到 log.txt 文件,它等价于exec 1>log.txt。

后面的两个 echo 命令都没有在显示器上输出,而是输出到了 log.txt 文件。

exec >&2用来恢复重定向,让标准输出重新回到显示器,它等价于exec 1>&2。2 是标准错误输出的文件描述符,它也是输出到显示器,并且没有遭到破坏,我们用 2 来覆盖 1,就能修复 1,让 1 重新指向显示器。

接下来的 echo 命令将结果输出到显示器上,证明exec >&2奏效了。

最后我们用 cat 命令来查看 log.txt 文件的内容,发现就是中间两个 echo 命令的输出。

重定向的恢复
类似echo “1234” >log.txt这样的重定向只是临时的,当前命名执行完毕后会自动恢复到显示器,我们不用担心。但是诸如exec >log.txt这种使用 exec 命令的重定向都是持久的,如果我们想再次回到显示器,就必须手动恢复。

以输出重定向为例,手动恢复的方法有两种:
/dev/tty 文件代表的就是显示器,将标准输出重定向到 /dev/tty 即可,也就是 exec >/dev/tty。

如果还有别的文件描述符指向了显示器,那么也可以别的文件描述符来恢复标号为 1 的文件描述符,例如 exec >&2。注意,如果文件描述符 2 也被重定向了,那么这种方式就无效了。

下面的例子演示了输入重定向的恢复:
#!/bin/bashexec 6<&0 #先将0号文件描述符保存exec <nums.txt #输入重定向sum=0while read n; do ((sum += n))doneecho "sum=KaTeX parse error: Expected 'EOF', got '&' at position 12: sum"exec 0<&̲6 6<&- #恢复输入重定…name已经$age岁了,它的网址是 url&quot;将代码保存到test.txt,并执行下面的命令:[mozhiyan@localhost]url&quot; 将代码保存到 test.txt,并执行下面的命令: [mozhiyan@localhost ~]url"将代码保存到test.txt,并执行下面的命令:[mozhiyan@localhost ] cat nums.txt
80
33
129
71
100
222
8
[mozhiyan@localhost ~]$ bash ./test.sh
sum=643
请输入名字、网址和年龄:C语言中文网 http://c.biancheng.net 7
C语言中文网已经7岁了,它的网址是 http://c.biancheng.net

shell exec命令相关推荐

  1. vba调用linux shell,调用命令提示符并通过VBA中的Shell Exec执行命令

    我试图在VBA Excel中使用Shell脚本在命令提示符上执行命令.当我在命令提示符下执行此命令时,它通过打印一个数字作为输出.但是当我在脚本中调用相同的命令时,它不会在消息框中显示此数字.调用命令 ...

  2. 【shell】find -exec 命令

    格式如下: find dir -exec cmd \; 但是通常,后面的cmd命令需要处理find查询到的文件,所以需要把文件名传给cmd.这时,可以使用占位符{}来表示find到的文件名. 那么格式 ...

  3. execv shell_shell的exec命令

    1 shell 中的exec用法 在shell脚本中使用exec命令,根据操作的对象不同会有不同的行为 1 操纵文件描述符 这里面又要说说描述符 shell中有12个描述符 其中 0 代表标准输入 1 ...

  4. 【Linux】一步一步学Linux——exec命令(208)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 exec命令用于调用并执行指令的命令.exec命令通常用在 ...

  5. Linux下使用exec命令将文件与文件描述符关联

    在shell脚本下exec为系统自带的脚本命令,其作用是用来执行其他程序: 语法格式: exec (选项)(参数) 选项: -c:在当前环境下执行命令,即在当前shell脚本下执行,而不是打开一个新的 ...

  6. linux系统下的shell是什么,Linux系统中shell各命令的区别有什么?

    今天小编要跟大家分享的文章是关于Linux系统中shell各命令的区别有什么?喜欢Linux系统并对此感兴趣的小伙伴们快来一起看一看吧~希望对你有所帮助. 1.xargs作用: (1)将前一个命令的标 ...

  7. Shell | 实用命令不完全总结

    本文不完全总结实用的 shell 命令 1. Updated: 2022 / 11 / 17 Shell | 实用命令不完全总结 uname 概念 用法 示例 ios Ubuntu dmesg 概念 ...

  8. #!/bin/bash和#!/bin/sh的区别,source命令和exec命令

    Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别 一.含义 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的she ...

  9. 【系统性学习】Linux Shell常用命令

    本文重点是脚本开发时会常用的命令和一些提高效率的高频系统操作命令,其他命令(主要是运维方面的,如网络操作.硬件操作.文件打包等)后续补充. 该文配合[系统性学习]Linux Shell易忘重点整理(会 ...

最新文章

  1. 百度短视频推荐系统的目标设计
  2. thymeleaf公共页面元素抽取 || 引入片段的时候传入参数
  3. Divan and Kostomuksha (easy version) dp,gcd(2100)
  4. 互联网API开放平台安全设计-基于OAuth2.0协议方式
  5. Tensorflow学习教程------tfrecords数据格式生成与读取
  6. oracle序列建同义词,oracle序列创建同义词
  7. layui 模板引擎
  8. BM77SPP03蓝牙模块开发
  9. HTMLParser(一个比较流行的html代码解析、处理开源项目)学习,总结
  10. 电子护照阅读器|机场海关边检酒店必备
  11. 贝壳云P1刷机记录(5.10内核Armbian)
  12. android堆内存解析,heapsnap HeapSnap 是一款针对 Android 进程堆内存进行追踪、定位,以便查出泄露位置的工具 @codeKK c开源站...
  13. AppleTalk:Apple 公司协议组--网络大典
  14. ios点击推送闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来...
  15. OpenSSH创建秘钥的4种格式以及git多秘钥配置
  16. iOS开发一路走来看到,好奇,好玩,学习的知识点记录
  17. C++实现太阳系行星系统
  18. Python变量赋值出现SyntaxError: invalid syntax
  19. 这款小程序 能让你和孙悟空一样 可以七十二变
  20. 计算机双代号网络图,双代号网络图计算机自动绘制研究.pdf

热门文章

  1. git-hub 的使用指南
  2. 网站提示服务器磁盘空间不足,解决服务器磁盘空间不足
  3. iframe加载白屏问题
  4. 爱贝云计费服务端接入注意事项
  5. 探讨“对称数”的判断算法
  6. Excel操作:使用函数进行统计
  7. opencv学习笔记五--文件扫描+OCR文字识别
  8. vue3 简易等待图片加载的组件
  9. 微信小程序(游戏)----拼图游戏(设计思路)
  10. 利川计算机培训,利川云计算培训,利川计算机培训有哪些,利川计算机培训完工作好找吗 - IT教育频道...