Shell 脚本执行命令 source 与 bash 的区别
执行命令:
-
bash ./filename.sh
-
./filename.sh (使用SHA BANG 脚本文件#!开头格式)
以上命令是开启一个新子进程去执行sh脚本。
-
source ./filename.sh
-
.filename.sh
以上命令是在当前进程来进行运行。
举个栗子:
-
创建新的shell脚本:
# 使用vim命令添加shell脚本 vim test.sh # 编写shell脚本 #! /bin/bash cd /etc/nginx/ ls -l du -sh * ~ # 查看脚本当前的路径: [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# pwd /home/lvhuiqi
-
使用新创建子进程命令执行sh脚本:
# 执行命令 [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ./test.sh total 72 drwxr-xr-x 2 root root 146 Dec 27 02:05 conf.d drwxr-xr-x 2 root root 6 Oct 8 2019 default.d -rw-r--r-- 1 root root 1077 Oct 8 2019 fastcgi.conf -rw-r--r-- 1 root root 1077 Oct 8 2019 fastcgi.conf.default -rw-r--r-- 1 root root 1007 Oct 8 2019 fastcgi_params -rw-r--r-- 1 root root 1007 Oct 8 2019 fastcgi_params.default -rw-r--r-- 1 root root 2837 Oct 8 2019 koi-utf -rw-r--r-- 1 root root 2223 Oct 8 2019 koi-win -rw-r--r-- 1 root root 5170 Oct 8 2019 mime.types -rw-r--r-- 1 root root 5170 Oct 8 2019 mime.types.default -rw-r--r-- 1 root root 2469 Sep 21 22:36 nginx.conf -rw-r--r-- 1 root root 2625 Aug 11 16:50 nginx.conf.bak1 -rw-r--r-- 1 root root 2656 Oct 8 2019 nginx.conf.default -rw-r--r-- 1 root root 636 Oct 8 2019 scgi_params -rw-r--r-- 1 root root 636 Oct 8 2019 scgi_params.default -rw-r--r-- 1 root root 664 Oct 8 2019 uwsgi_params -rw-r--r-- 1 root root 664 Oct 8 2019 uwsgi_params.default -rw-r--r-- 1 root root 3610 Oct 8 2019 win-utf # 以上是命令运行的结果 20K conf.d 0 default.d 4.0K fastcgi.conf 4.0K fastcgi.conf.default 4.0K fastcgi_params 4.0K fastcgi_params.default 4.0K koi-utf 4.0K koi-win 8.0K mime.types 8.0K mime.types.default 4.0K nginx.conf 4.0K nginx.conf.bak1 4.0K nginx.conf.default 4.0K scgi_params 4.0K scgi_params.default 4.0K uwsgi_params 4.0K uwsgi_params.default 4.0K win-utf
# 查看当前所在目录 [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# pwd /home/lvhuiqi
此命令是新创建了一个子进程去执行shell脚本的命令,执行完原路径保持不变
-
使用source当前进程去执行shell脚本:
# 执行命令 [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# source ./test.sh total 72 drwxr-xr-x 2 root root 146 Dec 27 02:05 conf.d drwxr-xr-x 2 root root 6 Oct 8 2019 default.d -rw-r--r-- 1 root root 1077 Oct 8 2019 fastcgi.conf -rw-r--r-- 1 root root 1077 Oct 8 2019 fastcgi.conf.default -rw-r--r-- 1 root root 1007 Oct 8 2019 fastcgi_params -rw-r--r-- 1 root root 1007 Oct 8 2019 fastcgi_params.default -rw-r--r-- 1 root root 2837 Oct 8 2019 koi-utf -rw-r--r-- 1 root root 2223 Oct 8 2019 koi-win -rw-r--r-- 1 root root 5170 Oct 8 2019 mime.types -rw-r--r-- 1 root root 5170 Oct 8 2019 mime.types.default -rw-r--r-- 1 root root 2469 Sep 21 22:36 nginx.conf -rw-r--r-- 1 root root 2625 Aug 11 16:50 nginx.conf.bak1 -rw-r--r-- 1 root root 2656 Oct 8 2019 nginx.conf.default -rw-r--r-- 1 root root 636 Oct 8 2019 scgi_params -rw-r--r-- 1 root root 636 Oct 8 2019 scgi_params.default -rw-r--r-- 1 root root 664 Oct 8 2019 uwsgi_params -rw-r--r-- 1 root root 664 Oct 8 2019 uwsgi_params.default -rw-r--r-- 1 root root 3610 Oct 8 2019 win-utf # 以下是脚本的输出 20K conf.d 0 default.d 4.0K fastcgi.conf 4.0K fastcgi.conf.default 4.0K fastcgi_params 4.0K fastcgi_params.default 4.0K koi-utf 4.0K koi-win 8.0K mime.types 8.0K mime.types.default 4.0K nginx.conf 4.0K nginx.conf.bak1 4.0K nginx.conf.default 4.0K scgi_params 4.0K scgi_params.default 4.0K uwsgi_params 4.0K uwsgi_params.default 4.0K win-utf
# 查看当前所在的路径 [root@iZbp1e44zna0rzyna76eszZ nginx]# pwd /etc/nginx
路径发生了改变,并不是/home/lvhuiqi/,而是在test.sh脚本里的cd 的命令,source 命令是当前进程所执行的命令