B站: 迷途小书童的Note;微信公众号: Dev_Club;个人微信:xituxiaoshutong100

shell脚本调用的三种方法

Linux 迷途小书童 0评论

软硬件环境

  • ubuntu 18.04 64bit
  • shell

视频看这里

此处是youtube的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

简介

linux系统中,在一个shell脚本中去调用另一个shell脚本,这种需求还是蛮常见的,本文就来分享几种实现脚本调用的方法。

首先准备一个被调用的脚本sub.sh

#!/bin/bash

echo "I am sub shell script."

方法一

使用source命令,代码如下,在main.sh中调用sub.sh

#!/bin/bash

echo "I am main shell script."
source sub.sh

执行main.sh使用命令

bash main.sh

执行的结果是

(base) xugaoxiang@1070Ti:~/workshop/scripts$ bash main.sh
I am main shell script.
I am sub shell script.

注意到,上面并没有使用sh main.sh,这是因为在ubuntu 18.04sh指向的是dash

(base) xugaoxiang@1070Ti:~/workshop/scripts$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 3月  24 15:21 /bin/sh -> dash

如果你想让sh指向bash的话,也是可以的,通过下面的命令进行修改

sudo dpkg-reconfigure dash

shell

接下来再次确认是否修改成功

(base) xugaoxiang@1070Ti:~/workshop/scripts$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 8月  25 15:40 /bin/sh -> bash

方法二

使用.号,注意点号和被调用脚本之间有个空格

#!/bin/bash

echo "I am main shell script."
. sub.sh

执行结果和方法一是一模一样的

使用shell显示调用

main.sh中使用bash sub.sh来调用

#!/bin/bash

echo "I am main shell script."
bash sub.sh

执行的结果也是一样的

备注

上述三种方法中,其中方法一和方法二,本质上是一样的。main.sh会将sub.sh脚本中的内容拷贝过来,由一个shell进程来执行。为验证这个,我们简单修改下sub.sh,让它进入sleep 100

#!/bin/bash

echo "I am sub shell script."
sleep 100

main.sh中使用source.调用时,通过ps命令可以看到main.sh,但是没有sub.sh进程

shell

而使用bash命令来调用脚本sub.sh和前两种方法有着本质的区别。使用bash命令会开启新的shell进程来执行脚本。

shell

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址