【Linux/shell】使用bash/sh file.sh、./file.sh 、source file.sh、. file.sh的区别(20210109)

8 篇文章 0 订阅

#参考文章:
https://blog.csdn.net/cju_277/article/details/112016245

首先打印当前进程的父进程ID和当前进程的ID,分别使用如下命令:

打印父进程ID: echo $PPID
打印当前进程ID: echo $$

现在把它写入脚本里面,如下所示:

[root@centos76 ~]#cat test.sh 
#!/bin/bash
echo " PPID: $PPID ,PID: $$"

在执行之前,先来确定一下当前shell环境的PID号:

[root@centos76 ~]#tty
/dev/pts/0
[root@centos76 ~]#ps axjf|head -1;ps axjf | grep pts/0
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
26780 22636 22636 22636 ?           -1 Ss       0   0:00  \_ sshd: root@pts/0
22636 22639 22639 22639 pts/0    22894 Ss       0   0:00      \_ -bash
22639 22894 22894 22639 pts/0    22894 R+       0   0:00          \_ ps axjf
22639 22895 22894 22639 pts/0    22894 S+       0   0:00          \_ grep --color=auto pts/0
[root@centos76 ~]#

可以看出来当前shell进程的PID号(-bash)是22639这个数字,现在来执行一下看看。

1.使用bash/sh命令执行

在这里插入图片描述
可以看出来当前的shell环境又生成了一个新的子shell环境,其子进程ID:22926,此时 $$ 正好打印的是这个子进程的ID号。

2.使用./命令执行(先赋予x权限)

在这里插入图片描述
可以看出来当前的shell环境也是又生成了一个新的子shell环境,其子进程ID:22988,进程ID号是随机的,因此跟上面的不一样。

3.使用source命令来执行

在这里插入图片描述
可以发现这次的PID号是22639,也就是当前shell环境的PID,而22636是其父进程ID号。这说明使用source命令执行脚本后并没有生成一个新的子shell环境。还是在原来的bash shell环境中执行的shell脚本。

4.使用.命令来执行

在这里插入图片描述
依然是与上面的soure命令的情况是一样的,使用 . 来执行脚本,并没有生成新的子shell环境,还是在原来的bash shell环境中执行的。

总结

总结:
(1)bash/sh 与 路径,后面跟上sh脚本的话,当前的shell环境会生成了一个新的子shell环境来运行shell脚本的;
bash/sh file.sh
./file.sh

(2)source 和 .是等价的,后面跟上sh脚本的话,并不会生成一个新的子shell环境,还是在原来的bash shell环境中执行的shell脚本。
source file.sh、
. file.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值