执行脚本的方法
(
1
)
bash ./filename.sh
(产生子进程,再运行,使用当前指定的
bash shell
去运行)
(
2
)
./filename.sh
(产生子进程,再运行,使用脚本里面指定的
shell
去运行。使用该种方式执行需要
x
权限)
(
3
)
source ./filename.sh
(
source
命令是一个
shell
内部命令,其功能是读取指定的
shell
程序文件,并
且依次执行其中的所有的语句,并没有创建新的子
shell
进程,所以脚本里面所有创建的变量都会保存到
当前的
shell
里面)
(
4
)
. ./filename.sh
(和
source
一样,也是使用当前进程执行)
一
[root@localhost test]
# vim test2.sh
#!/bin/bash
cd
/tmp
pwd
[root@localhost test]
# ls -l test2.sh
-rw-r--r--
.
1
root root
24
Apr
30 20
:09 test2.sh
(1)[root@localhost test]
# bash test2.sh
/tmp
(2)[root@localhost test]
# ./test2.sh
-bash
: ./test2.sh: Permission denied
[root@localhost test]
# chmod a+rx test2.sh
[root@localhost test]
# ./test2.sh
/tmp
(3)[root@localhost test]
# source test2.sh
/tmp
[root@localhost tmp]
#
(4)[root@localhost test]
# . test2.sh
/tmp
[root@localhost tmp]
#
执行
shell
脚本时,如果使用
1
和
2
这种方式执行会在当前的进程下产生一个新的
bash
子进程,所以子进程
切换到了
/tmp
目录,当脚本结束,子进程也就结束了,所以当前进程的目录不会发生变化;
3
和
4
方式执
行时,不会产生新的进程,所以脚本执行结束后当前的目录会变成
/tmp
。
二
[root@localhost test]
# echo 'userdir=`pwd`' > test3.sh
[root@localhost test]
# cat test3.sh
userdir
=
`pwd`
(1)[root@localhost test]
# bash test3.sh
[root@localhost test]
# echo $userdir
[root@localhost test]
#
(2)[root@localhost test]
# chmod a+rx test3.sh
[root@localhost test]
# ./test3.sh
[root@localhost test]
# echo $userdir
[root@localhost test]
#
(3)[root@localhost test]
# source test3.sh
[root@localhost test]
# echo $userdir
/test
(4)[root@localhost test]
# . test3.sh
[root@localhost test]
# echo $userdir
/test
![](https://i-blog.csdnimg.cn/direct/017b0775aec14f72be9d07761a1b1946.png)
![](https://i-blog.csdnimg.cn/direct/d8360e545037428999685b846b2b0a01.png)
![](https://i-blog.csdnimg.cn/direct/888240f3b9fd493d88ac58a5877bd2a6.png)
![](https://i-blog.csdnimg.cn/direct/fe738b85c530493eb278069f934d450a.png)