51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1950|回复: 0
打印 上一主题 下一主题

[原创] shell exec命令

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:22
  • 签到天数: 402 天

    连续签到: 3 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2019-1-4 18:08:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。  
    因此,如果你在一个shell里面,执行exec ls那么,当列出了当前目录后,这个shell就自己退出了,因为这个shell进程已被替换为仅仅执行ls命令的一个进程,执行结束自然也就退出了。为 了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh,(a.sh就是存放该命令的脚本),这样会为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。  
    source命令或者".",不会为脚本新建shell,而只是将脚本包含的命令在当前shell执行。
      
    不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。  
        exec 3<&0:这个命令就是将操作符3也指向标准输入。  

    另外,这个命令还可以作为find命令的一个选项,如下所示:  
    (1)在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行  
    find ./ -name "*.txt" -exec grep "bin" {} /;  

    (2)在当前目录下(包含子目录),删除所有txt文件  
    find ./ -name "*.txt" -exec rm {} /;
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-25 08:26 , Processed in 0.063673 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表