`
dxm1986
  • 浏览: 429231 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux:Shell中exec、source和shell script的区别

 
阅读更多

 

linux:Shell中exec、source和shell script的区别

分类: Linux 相关 614人阅读 评论(0) 收藏 举报

 

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。

bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。

在说明exe和source的区别之前,先说明一下fork的概念。

fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。

环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。

 

shell script:

有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。
新产生一个shell然后再执行scripts的方法是在scripts文件开头加入以下语句

#!/bin/sh

一般的script文件(.sh)即是这种用法。这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令。
另外一种方法就是上面说过的source命令,不再产生新的shell,而在当前shell下执行一切命令。

 

source:

source命令即点(.)命令。

在bash下输入man source,找到source命令解释处,可以看到解释"Read and execute commands from filename in the current shell environment and ..."。从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。

 

exec:

在bash下输入man exec,找到exec命令解释处,可以看到有"No new process is created."这样的解释,这就是说exec命令不产生新的子进程。那么exec与source的区别是什么呢?

exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。

分享到:
评论

相关推荐

    hbase-shell批量命令执行脚本的方法

    exec $HBASE_HOME/bin/hbase shell <<EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create 't_abc', 'info' EOF 以上这篇hbase-shell批量命令执行脚本的...

    详解Shell脚本中调用另一个Shell脚本的三种方式

    在同一个 Shell 中执行,在被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行。 第一种:fork 特点:会生成子PID而且可重复被调用。  :diamond_suit:fork 是最...

    在Shell脚本中调用另一个脚本的三种方式讲解

    exec: exec path/to/foo.sh source: source path/to/foo.sh fork fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用 foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 ...

    shell十三问

    10 六、 exec 跟 source 差在哪? 15 七、 ( ) 与 { } 差在哪? 18 八、 $(( )) 与 $( ) 还有${ } 差在哪? 19 九、 $@ 与 $* 差在哪? 23 十、 && 与 || 差在哪? 26 十一、 > 与 差在哪? 30...

    Shell13问

    6) exec 跟 source 差在哪? 7) ( ) 与 { } 差在哪? 8) $(( )) 与 $( ) 还有${ } 差在哪? 9) $@ 与 $* 差在哪? 10) && 与 || 差在哪? 11) > 与 差在哪? 12) 你要 if 还是 case 呢...

    Linux使用教程(教程)

    ※七、 exec 跟 source 差在哪? 这次先让我们从 CU Shell 版的一个实例贴子来谈起吧:例中的提问是: 92 八、 ( ) 与 { } 差在哪? 95 ※九、 $(( )) 与 $( ) 还有${ } 差在哪? 97 ※十、 $@ 与 $* 差在哪? 101 ...

    解决docker CMD/ENTRYPOINT执行sh脚本报: not found/run.sh:

    补充知识:docker中启动容器时CMD调用的sh脚本中if命令报未预期的符号 if[[的解决办法 最近通过Dockerfile编写镜像,CMD中调用的是sh脚本(start.sh)进行启动容器,通过docker run启动时,启动不成功,进行docker ...

    Linux高级bash编程

    break和continue命令在循环中的效果 10-21. 多层循环的退出 10-22. 多层循环的continue 10-23. 在实际的任务中使用"continue N" 10-24. 使用case 10-25. 使用case来创建菜单 10-26. 使用命令替换来产生case变量 10-...

    bass:使Bash实用程序可在Fish shell中使用

    常规的bash脚本可以在鱼壳中使用,就像用任何语言编写的脚本一样,具有适当的shebang或显式使用解释器(即,使用bash script.sh )。 但是,许多实用程序(例如virtualenv)会修改外壳环境,并且需要获取该实用程序...

    大数据流处理框架介绍.pdf

    exec-memory-kafka.sinks.kafka-sink.requiredAcks=1 #使kafka对是否收到数据进⾏确认,确保数据不会丢失 #为sink和source指定channel exec-memory-kafka.sources.exec-source.channels=memory-channel exec

    overlay-text-linux:使用osd_cat将视频上的文字叠加在屏幕上

    它使用osd_cat -bin debian / ubuntu软件包中的osd_cat命令。 用法 '-t':显示在顶部,始终是第一个参数 '-b':显示在底部,始终是第一个参数 例子 在顶部显示两行(最多4行,或修改overlay.sh脚本) ./overlay.sh...

    Spark-shell批量命令执行脚本的方法

    exec $SPARK_HOME/bin/spark-shell --queue tv --name spark-sql-test --executor-cores 8 --executor-memory 8g --num-executors 8 --conf spark.cleaner.ttl=240000 <<!EOF import org.apache.spark.sql....

    r58_evb_sc5806v4加载TP成功修改config 20160815 2026.7z

    eurasiacon/build/linux2/modules.mk:47: *** In makefile services4/srvkm/env/linux/Linux.mk: Duplicate module srvkm (first seen in eurasiacon/binary2_sunxi_android_release/target/kbuild/services4/srvkm/...

    cache_cd:更智能的 shell 光盘

    将脚本复制到某个地方,然后使用“source”命令从 shell 初始化脚本中调用它。 例如,将它复制到 ~/bin/cache_cd,将其复制到你的 ~/.bashrc 或 ~/.zshrc: source ~/bin/cache_cd 并重新启动您的外壳:关闭并重新...

    supergroup.mixin.one::spiral_shell:Mixin Super Group源代码-one source code

    cd web和exec npm install cp env.example .env.local ,您可以在找到更多文档 替换.env.local配置 跑 服务器端 ./supergroup.mixin.one处理http请求 ./supergroup.mixin.one -service message处理消息 前端 生成...

    存储过程的安全及性能优化

     exec master..xp_cmdshell 'dir *.exe' -- 执行目录命令查询[sql2005\sql2008]  exec master..xp_fixeddrives --列出硬盘分区各自可用空间  xp_regwrite根键,子键,值名,值类型,值【sql2008拒绝访问】  ...

    Advanced Bash-Scripting Guide <>

    使用exec 在同一脚本中重定向stdin 和stdout 16-4. 避免子shell 16-5. while 循环的重定向 16-6. 另一种while 循环的重定向 16-7. until 循环重定向 16-8. for 循环重定向 16-9. for 循环重定向 loop (将标准输入和...

    2009 达内Unix学习笔记

    命令和参数之间必需用空格隔开,参数和参数之间也必需用空格隔开。 一行不能超过256个字符;大小写有区分。 二、特殊字符含义 文件名以“.”开头的都是隐藏文件/目录,只需在文件/目录名前加“.”就可隐藏它。...

    1024tools:1024Tools开发工具箱

    1024tools.com开发环境编译相关共识:docker docker build -f .docker/php/Dockerfile -t 1024tools_php .docker/php启动: docker stack...-u root -p123456初始化mysql:在mysql shell中执行source /tmp/init.sql访问

    xls转mdb代码以及.exe执行软件

    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' /*********** 导入Excel SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data ...

Global site tag (gtag.js) - Google Analytics