shell中sh, exec, source, fork, ./的区别

https://www.cnblogs.com/cord/p/9226498.html

shell中sh, exec, source, fork, ./的区别

1,sh

sh test.sh

? sh是通过创建子进程(subshell)去执行脚本,父进程无法使用子进程中的变量,而子进程对环境变量的修改也不会影响到父进程。父进程中的局部变量子进程也无法使用,子进程会继承父进程的环境变量;

? 脚本不需要执行权限

2,exec

exec + command
./test.sh exec

? 使用exec执行脚本,被执行的脚本会继承当前shell的环境变量,exec相当于创建了新进程,它会将主进程的进程资源占用,使用主进程的pid,而exec语句执行完之后,后续的语句不再执行;
? 脚本需要执行权限

3,source

source test.sh

? 使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。

? 脚本不需要执行权限

4,fork

./test fork

? 使用fork执行脚本的时候会创建一个子进程去执行该脚本,子进程会继承父进程的环境变量和声明变量。当子进程执行完毕后会返回父进程,但是父进程的环境变量不会因子进程的改变而改变。

? 脚本需要执行权限

5,./

./test.sh

? 创建一个子进程去执行脚本

? 脚本需要执行权限

在工作中比较常用的是 ./test.sh  或者 sh test.sh 这2个用法一致,都是重新创建了个子进程来执行脚本;

其次我会用source执行,source会继承父进程的一切,没有新建进程。

原文地址:https://www.cnblogs.com/ivyharding/p/11297255.html

时间: 2024-11-10 13:00:50

shell中sh, exec, source, fork, ./的区别的相关文章

Linux下sh/bash/source/.命令的区别(转)

一..sh文件介绍 .sh为Linux的脚本文件,我们可以通过.sh执行一些命令,可以理解为windows的.bat批处理文件. 二.点命令(.) .命令和source是同一个命令,可以理解为source的缩写,简称点命令. 三.sh/base/source/.命令执行.sh文件的区别 假如有一个文件test.sh,脚本内容如下 #!/bin/bash echo "step 1 sleeping" sleep 200 echo "step 2 sleeping" s

Linux SHELL中sh和bash的区别

什么是SHELL? shell的中文意思就是贝壳,其实比较类似于我们内核的壳.简而言之就是只要能够操作应用程序的接口都能够称为SHELL.狭义的shell指的是命令行方面的软件,广义的SHELL则包括图形界面. SHELL的版本 在鸟哥的私房菜的一书中,介绍了UNIX的版本以及众多的SHELL版本. 早在UNIX年代,发展者众多,所以由于shell依据发展者的不同就有许多版本,比如sh,C SHell,K SHell,还有TCSH等,每一种Shell都各有特点.当然也有我们的bash,bash这

js正则表达式中test,exec,match方法的区别说明

test  test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1.", "");alert(reg.test(str)); // true exec exec 查找并返回当前的匹配结果,并以数组的形式返回.var str = "1a1b1c";var reg = new RegExp("1.", "&q

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载

原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令.在子命令执行完后再执行父级命令,子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

一.fork  ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令.子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在. sub-shell执行完毕后返回parent-shell. sub-shell

shell调用另一个脚本的三种方式fork/exec/source

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

fork exec source的区别

参考:http://www.cnblogs.com/bkygg/p/5023072.html 1:fork  运行的时候开一个sub_shell 执行调用的脚本,sub_shell执行的时候,parent_shell还在.sub_shell执行完毕后返回parent_shell.sub_shell从parent_shell继承环境变量.但是sub_shell中的变量不会带回parent_shell.在子命令执行完后再执行父命令,子级的环境变量不会影响到父级 2:exec 执行子级的命令后,不再执

shell中exec命令的使用

由于最近经常写脚本的缘故,与exec结缘,哈哈,今天简单记录一下,以加深印象 exec 执行程序 虽然exec和source都是在父进程中直接执行,但exec这个与source有很大的区别,source是执行shell脚本,而且执行后会返回以前的shell.而exec的执行不会返回以前的shell了,而是直接把以前登陆shell作为一个程序看待,在其上经行复制 注意:这里是指在shell脚本中执行的时候,exec会产生退出的一个状态,所以一般会以调用的方式来使用exec,不过当它来对文件操作符进

shell中与C语言中的区别

shell中为啥与C语言有区别呢?弄成一样的不是很好么,其实不然,shell提供很多操作,这些操作不单单是执行程序或者命令,在很多时候是执行脚本的,简单的shell就是脚本编程,它的主要目的是处理文件相关操作,这样如果是单纯的C语言就没办法完成了,所以需要加入很多能够操作命令的东西,对此下面进行了简单的说明: 1.在shell中所有关于变量的操作需要用((  ))来区分,例如: a=10; b=20; ((c=a+b)); echo ${c}; 上面的例子中(( c=a+b))这里用了双括号是为