当前位置:首页 » 编程软件 » shell脚本中的source

shell脚本中的source

发布时间: 2023-07-11 01:42:26

❶ shell脚本执行source报错

在Ubuntu 16.04机器在执行shell脚本时,报source: not found
原因是shell脚本执培困行的时候配稿念用的不是bash,而是dash,可以使用下面方法修改。

出现对话框后,选择no,再查看一次

重新执行脚本敬塌,问题解决

❷ shell命令中用source 和sh(或者bash)执行脚本的区别,以及export的作用

用户登录到linux系统后,系统将启动一个用户shell,我们暂且称这个shell为shell父。在这个shell父中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。

当使用sh或者bash运行shell脚本程序时,系统将创建一个子shell,我们暂且称为shell子。此时,系统中将有两个shell,一个是登录时系统启动的shell父,另一个是系统为运行脚本程序创建的shell子。

当一个脚本程序运行完毕,脚本shell子将终止,返回到执行该脚本之前的shell父。这时脚本中创建的变量或者环境变量(export的变量)是在shell子中创建的,只在shell子中有效,在shell父中是无法访问的source(或者.)的作用是文件包含,当使用source运行脚本程序时,系统并不会创建子shell,而是将脚本中的命令放到shell父中运行,这时脚本中创建的变量或者环境变量(export的变量)相当于是在shell父中创建的,在shell父中是可以访问的。
因此使用source执行修改后的配置文件会直接生效,不需要重启export 的作用是为当前shell设置环境变量,这样变量在其子shell也可以访问,当然,在其父shell中还是无法访问的普通的变量只在当前shell中可以访问,在父shell或者子shell中都无法访问。

export 也是 bash 的一个内置命令。它主要是用来将父 shell 里的变量导出供子 shell 使用。
它有如下特征:

❸ exec、source以及bash的区别

在bash shell中,source、exec以及sh都可以用来执行shell script,但是它们的差别在哪里呢?sh:父进程会fork一个子进程,shell script在子进程中执行source:在原进程中执行,不会fork子进程exec:在原进程中执行,但是同时会终止原进程 注:使用export会把父进程中的变量向子进程中继承,但是反过来却不行,在子进程中,不管环境如果改变,均不会影响父进程

下面用一个例子来讲解

[plain] view plain

1.sh

A=B
echo "PID for 1.sh before exec/source/fork:$"
export A
echo "1.sh: $A is $A"
case $1 in
exec)
echo "using exec..."
exec ./2.sh ;;
source)
echo "using source..."
. ./2.sh ;;
*)
echo "using fork by default..."
./2.sh ;;
esac
echo "PID for 1.sh after exec/source/fork:$"
echo "1.sh: $A is $A"

[plain] view plain

2.sh
CODE:

echo "PID for 2.sh: $"
echo "2.sh get $A=$A from 1.sh"
A=C
export A
echo "2.sh: $A is $A"

下面在命令行中去执行
./1.sh fork

可以看到,1.sh是在父进程中执行,2.sh是在子进程中执行的,父进程的PID是5344,而子进程的是5345,当子进程执行完毕后,控制权返回到父进程。同时,在子进程改变环境变量A的值不会影响到父进程。

./1.sh source

由结果可知,1.sh和2.sh都是在同一进程中执行的,PID为5367

./1.sh exec

可知,两个脚本都是在同一进程中执行,但是请注意,使用exec终止了原来的父进程,因此,可以看到

[plain] view plain

echo "PID for 1.sh after exec/source/fork:$"
echo "1.sh: $A is $A"

这两个命令没有执行

由这个例子,便大致可了解它们的区别了

❹ linux下的Source命令的基本功能

source命令用法:source FileName

作用:在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令".”来替代。

使用范例:

1、source filename

2、. filename#(中间有空格)

source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。

同样的,当前脚本中配置的变量也将作为脚本的环境,source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等。

例如,假如在登录后对 .bash_profile 中的 EDITER 和 TERM 变量做了修改,则能够用source命令重新执行 .bash_profile 中的命令而不用注销并重新登录。

比如在一个脚本里export $KKK=111,假如用./a.sh执行该脚本,执行完毕后,运行echo $KKK,发现没有值,假如用source来执行 ,然后再echo,就会发现KKK=111。

因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同他就是在本shell中执行的,所以能够看到结果。

source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是一个点符号,(从Bourne Shell而来)是source的另一名称。

这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子进程。所有在脚本中设置的变量将成为当前Shell的一部分。

文件建立好之后,以后每次编译核心,只需要在/usr/src/linux-2.4.20下输入source make_command就行了。这个文件也完全可以做成脚本,只需稍加改动即可。

shell编程中的命令有时和C语言是一样的。&&表示与,||表示或。把两个命令用&&联接起来,如make mrproper && make menuconfig,表示要第一个命令执行成功才能执行第二个命令。

对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行。

❺ shell中source和sh script的区别

主要区别,source是在当前的shell下运行文件内容,而sh或bash或其他shell+脚本文件,是在新的shell中执行。
可以在脚本文件中只写上变量赋值,如a=12,来进行验证:
在最初,echo $a 是空值或其他值,运行sh 脚本名 之后,再echo一下,a的值没有变,
而使用source 脚本名之后,echo $a 则显示12,它的值变化了。
source一般用于执行一些配置文件,比如.bashrc等,比如默认可能没有ll命令,在.bashrc中可以设置alias ll='ls -alF',source运行一下,就不用退出当前shell重新打开 就可以使用ll命令了。

❻ 执行shell脚本三种方法的区别:(sh、exec、source)

使用$ sh script.sh执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。
./script.sh与 sh script.sh等效。

使用$ source script.sh方式,在当前上下文中执行脚本,不会生成新的进程。脚本执行完毕,回到当前shell。
source方式也叫点命令。
. script.sh与 source script.sh等效。

使用exec command方式,会用command进程替换当前shell进程,并且保持PID不变。执行完毕,直接退出,不回到之前的shell环境。

二、测试验证
vi loop.sh

显示当前进程

sh的方式:执行loop.sh打印执行进程

source方式:执行loop.sh打印执行进程

exec方式:执行loop.sh打印执行进程

按下ctrl+C

sh方式:父进程是6770,执行loop.sh时的子进程是13736。执行完毕后回到父进程shell。
source方式:父进程和子进程都是6770(执行时没有新的进程),执行完毕会回到父进程shell。
exec方式:进程PID没有改变都是6770,执行完毕(ctrl+C强制关闭)时直接退出了shell。脚本执行时替换了父进程的shell,执行完毕后直接退出,没有回到之前的shell。

热点内容
命令行执行oracle脚本文件命令行 发布:2025-02-07 10:14:49 浏览:95
ibook安卓怎么下 发布:2025-02-07 10:12:13 浏览:692
银行卡没有密码怎么办啊 发布:2025-02-07 10:08:13 浏览:30
游戏库源码 发布:2025-02-07 09:49:15 浏览:53
享宇钱包上传不了照片 发布:2025-02-07 09:48:32 浏览:632
模拟器怎么开安卓版本 发布:2025-02-07 09:42:35 浏览:771
c程序设计语言源码 发布:2025-02-07 09:22:41 浏览:623
数据库域的概念 发布:2025-02-07 09:22:40 浏览:640
电信路由器账号密码多少 发布:2025-02-07 09:22:01 浏览:671
我的世界怎么在别人服务器开光影 发布:2025-02-07 09:21:20 浏览:12