目录
前提条件:
[root@web lianxi]# cat sc.sh
echo $sg $mv
[root@web lianxi]#
[root@web lianxi]# sg=claylpf
[root@web lianxi]# mv=liunana
子进程里运行
1、bash sc.sh (在子进程里运行)
[root@web lianxi]# bash sc.sh
[root@web lianxi]#
上图所示,bash sc.sh运行后没有输出,说明它在子进程里运行,而且无法继承父进程里的变量
2、./sc.sh (在子进程里运行)
同理:
[root@web lianxi]# ./sc.sh
-bash: ./sc.sh: 权限不够
[root@web lianxi]# chmod +x sc.sh
[root@web lianxi]# ./sc.sh
[root@web lianxi]#
./sc.sh运行后没有输出,说明它在子进程里运行,而且无法继承父进程里的变量,而且他需要对文件进行权限修改,增加可执行的权限。
bash sc.sh 和 ./sc.sh的区别是:
bash sc.sh
和 ./sc.sh
都是执行名为 sc.sh
的脚本文件的命令。
但是它们之间有一个重要的区别:
bash sc.sh
命令会在当前Shell中启动一个新的bash子进程,并在该子进程中执行脚本文件。这意味着,该脚本文件中定义的变量和环境变量只在子进程中有效,执行完毕后不会影响到父进程的环境变量和状态。
./sc.sh
命令是直接在当前Shell中执行脚本文件。这意味着,该脚本文件中定义的变量和环境变量将会影响到当前Shell的环境变量和状态。
因此,如果脚本文件中定义了需要在当前Shell中生效的环境变量或者需要对当前Shell中的环境变量进行修改,应该使用 ./sc.sh
命令。如果脚本文件只是作为一个独立的程序运行,并且不需要修改当前Shell的环境变量,可以使用 bash sc.sh
命令。
父进程里运行
3、. sc.sh (在父进程里运行)
[root@web lianxi]# . sc.sh
claylpf liunana
[root@web lianxi]#
4、source sc.sh (在父进程里运行)
[root@web lianxi]# source sc.sh
claylpf liunana
[root@web lianxi]#
当我在脚本里定义一个变量,执行脚本后,此变量会变成整个环境的变量
[root@web lianxi]# cat sc.sh
echo $sg $mv
gg="wo shi da shuai ge!"
[root@web lianxi]# echo $gg
[root@web lianxi]# source sc.sh
claylpf liunana
[root@web lianxi]# echo $gg
wo shi da shuai ge!
[root@web lianxi]#
. sc.sh 和source sc.sh的区别是:
. sc.sh
和 source sc.sh
命令是在当前Shell中执行名为 sc.sh
的脚本文件的命令。它们的作用是相同的,都可以用来加载脚本文件中定义的变量、函数和命令,以及执行脚本文件中的命令。
它们之间的区别在于:
. sc.sh
是点符号加空格的简写形式,也可以写成source sc.sh
。在Bash中,点符号和source命令是等价的,它们都会在当前Shell环境中执行脚本文件中的命令。在其他Shell中,可能没有点符号这个命令,只能使用
source sc.sh
命令来加载脚本文件中的命令。
总之,. sc.sh
和 source sc.sh
命令的作用是相同的,它们都可以用来加载脚本文件中的命令,但在不同的Shell中可能有不同的语法要求,需要根据具体的情况来选择使用哪种命令。