2.sh

1
2
3
4
5
#!/bin/bash

# demo 2.sh
cd /tmp
pwd

执行方式

子进程

bash ./filename.sh

在当前终端下面产生一个bash子进程,bash子进程再去解释filename.sh(不需要x权限)

1
2
3
4
5
6
7
8
[root@localhost ~]# ll 2.sh
-rw-r--r--. 1 root root 37 10月 16 16:30 2.sh

[root@localhost ~]# bash 2.sh
/tmp

[root@localhost ~]# pwd
/root

./filename.sh

同样产生一个子进程,但使用的是Sha-Bang(即#!)来解释filename.sh

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# ./2.sh
-bash: ./2.sh: 权限不够

[root@localhost ~]# chmod u+x 2.sh

[root@localhost ~]# ./2.sh
/tmp

[root@localhost ~]# pwd
/root

当前进程

source ./filename.sh

当前进程解释filename.sh

1
2
3
4
5
[root@localhost ~]# source ./2.sh
/tmp

[root@localhost tmp]# pwd
/tmp

. ./filename.sh

source方式

1
2
3
4
5
[root@localhost ~]# . 2.sh
/tmp

[root@localhost tmp]# pwd
/tmp

内建命令

  1. 内建命令不需要创建子进程(如cd、pwd等)
  2. 内建命令对当前Shell生效

参考资料

Linux实战技能100讲