shell中exec命令的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell中exec命令的使用相关的知识,希望对你有一定的参考价值。
由于最近经常写脚本的缘故,与exec结缘,哈哈,今天简单记录一下,以加深印象
exec 执行程序
虽然exec和source都是在父进程中直接执行,但exec这个与source有很大的区别,source是执行shell脚本,而且执行后会返回以前的shell。而exec的执行不会返回以前的shell了,而是直接把以前登陆shell作为一个程序看待,在其上经行复制
注意:这里是指在shell脚本中执行的时候,exec会产生退出的一个状态,所以一般会以调用的方式来使用exec,不过当它来对文件操作符进行操作时,就没有这样的功能了,执行完毕后,继续留在当前的shell,比如exec 3<&0 这个意思就是将操作符3也指向标准输入,没见过?好,马上来介绍一下它的语法
exec命令 | 作用 |
exec ls | 在shell中执行ls,ls结束后不返回原来的shell中了 |
exec <> | 将file中的内容作为exec的标准输入 |
exec >file | 将file中的内容作为标准写出 |
exec 3<> | 将file读入到fd3中 |
sort <&3 | fd3中读入的内容被分类 |
exec 4>file | 将写入fd4中的内容写入file中 |
ls >&4 | Ls将不会有显示,直接写入fd4中了,上面file中 |
exec 5<&4 | 创建fd4的拷贝fd5 |
exec 3<&- | 关闭fd3 |
先上我们进如/dev/fd/目录下看一下:
[email protected]:~/test#cd /dev/fd
[email protected]:/dev/fd#ls
0 1 2 255
默认会有这四个项:0是标准输入,默认是键盘。
1是标准输出,默认是屏幕/dev/tty
2是标准错误,默认也是屏幕
255
当我们执行exec 3>/root/test,再去看看/dev/fd,一定多个3,什么意思呢?也就是又增加了一个设备,这里也可以体会下linux设备即文件的理念。这时候fd3就相当于一个管道了,重定向到fd3中的文件会被写在test中。关闭这个重定向可以用exec 3>&-
此外,这个命令还可以作为find命令的一个选项,如下所示:
(1)在当前目录下(包含子目录),查找所有txt文件并找出含有字符串”bin”的行
find ./ -name “*.txt” -exec grep “bin” {}
(2)在当前目录下(包含子目录),删除所有txt文件
find ./ -name “*.txt” -exec rm {}
大家灵活运用吧
以上是关于shell中exec命令的使用的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 PHP shell_exec() 执行 telnet 命令
使用 shell_exec() 执行 libreoffice 命令时出错