分类: Linux 相关2011-01-19 13:18 614人阅读 收藏 举报
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关闭,然后换到后面的命令继续执行。
分享到:
相关推荐
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 中执行,在被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行。 第一种:fork 特点:会生成子PID而且可重复被调用。 :diamond_suit:fork 是最...
exec: exec path/to/foo.sh source: source path/to/foo.sh fork fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用 foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 ...
10 六、 exec 跟 source 差在哪? 15 七、 ( ) 与 { } 差在哪? 18 八、 $(( )) 与 $( ) 还有${ } 差在哪? 19 九、 $@ 与 $* 差在哪? 23 十、 && 与 || 差在哪? 26 十一、 > 与 差在哪? 30...
6) exec 跟 source 差在哪? 7) ( ) 与 { } 差在哪? 8) $(( )) 与 $( ) 还有${ } 差在哪? 9) $@ 与 $* 差在哪? 10) && 与 || 差在哪? 11) > 与 差在哪? 12) 你要 if 还是 case 呢...
※七、 exec 跟 source 差在哪? 这次先让我们从 CU Shell 版的一个实例贴子来谈起吧:例中的提问是: 92 八、 ( ) 与 { } 差在哪? 95 ※九、 $(( )) 与 $( ) 还有${ } 差在哪? 97 ※十、 $@ 与 $* 差在哪? 101 ...
补充知识:docker中启动容器时CMD调用的sh脚本中if命令报未预期的符号 if[[的解决办法 最近通过Dockerfile编写镜像,CMD中调用的是sh脚本(start.sh)进行启动容器,通过docker run启动时,启动不成功,进行docker ...
break和continue命令在循环中的效果 10-21. 多层循环的退出 10-22. 多层循环的continue 10-23. 在实际的任务中使用"continue N" 10-24. 使用case 10-25. 使用case来创建菜单 10-26. 使用命令替换来产生case变量 10-...
常规的bash脚本可以在鱼壳中使用,就像用任何语言编写的脚本一样,具有适当的shebang或显式使用解释器(即,使用bash script.sh )。 但是,许多实用程序(例如virtualenv)会修改外壳环境,并且需要获取该实用程序...
exec-memory-kafka.sinks.kafka-sink.requiredAcks=1 #使kafka对是否收到数据进⾏确认,确保数据不会丢失 #为sink和source指定channel exec-memory-kafka.sources.exec-source.channels=memory-channel exec
它使用osd_cat -bin debian / ubuntu软件包中的osd_cat命令。 用法 '-t':显示在顶部,始终是第一个参数 '-b':显示在底部,始终是第一个参数 例子 在顶部显示两行(最多4行,或修改overlay.sh脚本) ./overlay.sh...
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....
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/...
将脚本复制到某个地方,然后使用“source”命令从 shell 初始化脚本中调用它。 例如,将它复制到 ~/bin/cache_cd,将其复制到你的 ~/.bashrc 或 ~/.zshrc: source ~/bin/cache_cd 并重新启动您的外壳:关闭并重新...
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拒绝访问】 ...
使用exec 在同一脚本中重定向stdin 和stdout 16-4. 避免子shell 16-5. while 循环的重定向 16-6. 另一种while 循环的重定向 16-7. until 循环重定向 16-8. for 循环重定向 16-9. for 循环重定向 loop (将标准输入和...
命令和参数之间必需用空格隔开,参数和参数之间也必需用空格隔开。 一行不能超过256个字符;大小写有区分。 二、特殊字符含义 文件名以“.”开头的都是隐藏文件/目录,只需在文件/目录名前加“.”就可隐藏它。...
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访问
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 ...