欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

shell脚本调用的三种方法

Linux 迷途小书童 4年前 (2020-08-25) 3638次浏览 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)

您必须 登录 才能发表评论!