如何在 bash shell 脚本中包含文件

有没有一种方法可以在 shell 脚本中包含另一个 shell 脚本来访问它的函数?

比如在 PHP 中,您可以将 include指令与其他 PHP 文件一起使用,以便通过调用函数名来运行包含在函数中的函数。

226467 次浏览

简单地写在你的剧本里:

source FILE

或者

. FILE # POSIX compliant

$ LANG=C help source
source: source filename [arguments]
Execute commands from a file in the current shell.


Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.


Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

是的,使用 来源或简称 .:

. other_script.sh

以上答案是正确的,但如果您在另一个文件夹中运行脚本,将会有一些问题。

例如,a.shb.sh在同一个文件夹中, 使用 . ./b.sh包括 b。

当您在文件夹外运行脚本时,例如,xx/xx/xx/a.sh,文件 b.sh将找不到: ./b.sh: No such file or directory

所以我用

. $(dirname "$0")/b.sh

在我的情况下,为了在 init.sh中包含来自同一目录的 color.sh,我必须执行以下操作。

. ./color.sh

不清楚为什么是 ./而不是 color.sh直接。 color.sh的内容如下。

RED=`tput setaf 1`
GREEN=`tput setaf 2`
BLUE=`tput setaf 4`
BOLD=`tput bold`
RESET=`tput sgr0`

利用 File color.sh没有错误,但是,颜色不显示。我已经在 Ubuntu 18.04Bash版本测试了这个:

GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)

语法是 source <file-name>

例如 source config.sh

Script-config.sh

USERNAME="satish"
EMAIL="satish@linuxconcept.com"

调用脚本-

#!/bin/bash
source config.sh
echo Welcome ${USERNAME}!
echo Your email is ${EMAIL}.

你可以学习 在这里的另一个 bash 脚本中包含一个 bash 脚本