exec的多种运用

本文作者笔记体系归档:http://blog.csdn.net/qq_32642039/article/details/78489918
 

一、exec简介

1.

2.fork、exec和source的区别

(1)fork
fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。
环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。
(2)source
使用 source 方式运行 script 时, 就是让 在当前进程中执行参数文件中的各个命令, 而不是另起子进程(sub-shell)。 由此可见source执行的时候是当前shell环境下执行,执行完成后把结果返回给当前shell。

(3)exec
a)exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。

在终端中
[root@iZgf10elo5bco4Z ~]# su xingcheng
[xingcheng@iZgf10elo5bco4Z root]$ exec ls
[root@iZgf10elo5bco4Z ~]# 

在shell脚本中
[root@iZgf10elo5bco4Z ~]# cat test.sh
#!/bin/bash
a=1
echo $a
exec echo '1'
a=2
echo $a
[root@iZgf10elo5bco4Z ~]# sh -x test.sh 
+ a=1
+ echo 1
1
+ exec echo 1
1

b)使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前进程中执行, 但是 process 内的原代码剩下部分将被终止. 同样, process 内的环境随script 改变而改变.不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。
例如

[root@iZgf10elo5bco4Z ~]# cat test.sh && sh  test.sh

#!/bin/bash
a=1
exec > text.log
ls
pwd
echo "终端未退出"
exec > /dev/pts/0
ls

[root@iZgf10elo5bco4Z ~]# cat text.log 
1.sh
2.sh
2.txt
process.sh
tempfd1
test.sh
text.log
/root
终端未退出

二、exec的常见用法

1.exec与文件描述符

exec命令作用
exec 3<>hello.txt以读写方式绑定文件描述符”3”到hello.txt
exec 3< hello.txt以“只读方式”绑定文件描述符”3”到hello.txt
exec 3>hello.txt以“只写方式”绑定文件描述符”3”到hello.txt
exec 3>&-关闭文件描述符fd3的写,同时也不能读了
exec 3<&-关闭文件描述符fd3的读,同时也不能写了
exec >file将file中的内容作为标准写出
exec 5<&4创建fd4的拷贝fd5

2.find 和exec集合使用

(1)在当前目录下(包含子目录),查找所有txt文件并找出含有字符串”bin”的行
find ./ -name “*.txt” -exec grep “bin” {} \;

(2)在当前目录下(包含子目录),删除所有txt文件
find ./ -name “*.txt” -exec rm {} \;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值