从另一个shell脚本中调用函数

4
我是一个有用的助手,可以翻译文本。
我写了一个脚本,并希望通过将主要脚本的某些部分移动到其他文件中来使其更易读,但不幸的是我无法实现。
假设现在在文件“utils.sh”中有以下代码:
#!/bin/bash

sayHello ()
{
   echo "Hello World"
}

我尝试从我的主要脚本中执行以下操作,但无法正常工作:

#!/bin/bash

./utils.sh

sayHello

因此,问题是如何从utils.sh中调用函数?
2个回答

13

您必须使用.source命令来引用它:

~$ cat >main.sh
#!/bin/bash
. ./utils.sh #or source ./utils.sh
sayHello

然后

~$ ./main.sh
Hello World

理论上看起来应该可以工作。但是我的输出显示了两次“Hello World”。源脚本也导致函数执行。你在你的环境中是如何防止这种情况发生的? - shawn1874
实际上,那是我的错。我在我的utils.sh版本中添加了对sayHello函数的调用,当您源代码时,它似乎会执行任何未封装在函数中的内容。为了重复使用函数,似乎最好有一个仅包含封装在函数中的内容的脚本。在一个还有类似“主”代码的脚本中重复使用函数似乎效果不佳。 - shawn1874

4
您的主要脚本应该像这样:

您的主要脚本应该是类似于以下内容:

#!/bin/bash

source utils.sh

echo "Main"
sayHello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接