无法从 bash 脚本读取函数

无法从 bash 脚本读取函数

我有两个文件如下

通用函数.sh

#!/bin/bash
#
# Install .net core
#
function InstallDotNetCore
{
  echo "installeddotnetcore"
}
#
function InstallMdsHooks
{
 echo "installedmdshooks"
}
#
function InstallNodeAgent
{
echo "installnodeagent"
}

主目录

#!/bin/bash

echo "BootStrap Started"

source /tmp/genericfunctions.sh

sudo apt-get update

InstallDotNetCore
InstallMdsHooks


echo "Bootstrap complete"

错误:

xxxxxxx@xxxxxxtest2vm:/tmp$ sh main.sh
:All Args:
main.sh: 5: main.sh: source: not found
Hit:1 https://packages.microsoft.com/repos/microsoft-ubuntu-zesty-prod zesty InRelease
Hit:2 https://apt-mo.trafficmanager.net/repos/azurecore trusty InRelease
Hit:3 http://security.ubuntu.com/ubuntu artful-security InRelease
Hit:4 http://azure.archive.ubuntu.com/ubuntu artful InRelease
Hit:5 https://download.docker.com/linux/ubuntu artful InRelease
Get:6 http://azure.archive.ubuntu.com/ubuntu artful-updates InRelease [78.6 kB]
Hit:7 http://azure.archive.ubuntu.com/ubuntu artful-backports InRelease
Fetched 78.6 kB in 0s (111 kB/s)
Reading package lists... Done
main.sh: 9: main.sh: InstallDotNetCore: not found
main.sh: 10: main.sh: InstallMdsHooks: not found

:引导完成:

file2 中没有调用 file1 中的任何函数。我尝试简单地给出./tmp/file1.sh。它触发了 file1 中的所有函数。我只想触发特定的功能。

任何帮助是极大的赞赏。

答案1

由于这两个脚本文件都是bash脚本,因此您应该使用bashshell 解释器而不是shshell 解释器来运行它们。

#!脚本中有正确的-line,因此./main.sh只要脚本可执行,直接从命令行 ( ) 运行它就应该做正确的事情。


sh脚本中,函数是使用以下方式定义的

somefuctionname () {
    somefunctionbody
}

而不是使用关键字function.如果您还使用.(点) 代替source,则脚本已经能够在 下运行sh,除非使用了其他特殊bash功能。

相关内容