shell 内建命令 exec

  exec 命令并不启动新的 shell,而是用要被执行的命令替换当前的 shell 进程,并且将老进程的环境清理掉,exec 命令后的其它命令将不再执行。exec 在执行时会将当前的 shell process 关闭,然后切换到后面的命令继续执行。

  在一个 shell 中执行 exec ls,列出当前目录后,这个 shell 就会自己退出。因为这个 shell 进程已被替换为仅仅执行 ls 命令的一个进程,进程执行结束后自然也就退出了。

  这会影响我们的使用,为了避免这种情况,一般将 exec 命令放到一个 shell 脚本中,用主脚本调用这个脚本。调用点处可以用 bash a.sh(a.sh 包含 exec ls),这会为 a.sh 建立一个 sub shell 去执行,当执行到 exec 时,该 sub shell 将被替换成 ls 进程。

  source 命令或者“.”不会为脚本新建 shell,而只是将脚本包含的命令在当前 shell 执行。

  修改当前文件描述符

  $ exec 3 < afile

  这将使文件描述符 3 被打开,以便从文件 afile 里读取数据。这种用法非常少见。

  exec 命令对文件描述符操作时不会替换 shell,并且操作完成后仍会继续执行后面的命令。

  exec 命令还可以作为 find 命令的一个选项

  1. 在当前目录下(包含子目录)查找所有 txt 文件,并找出含有字符串 bin 的行

  $ find ./ -name “*.txt” -exec grep “bin” {} \;

  2. 在当前目录下(包含子目录)删除所有 txt 文件

  $ find ./ -name “*.txt” -exec rm {} \;

  -exec  后是 command 命令,命令必须以;为结束标志,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
  {} 花括号代表 find 找到的文件名。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值