Bash スクリプトから関数を読み取れません。

Bash スクリプトから関数を読み取れません。

次のように2つのファイルがあります

汎用関数.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

:起動完了:

file1 のどの関数も file2 から呼び出されません。私は単に./tmp/file1.shを提供しようとしました。 file1 のすべての機能をトリガします。特定の機能だけを実行したいです。

どんな助けでも大変感謝します。

答え1

両方のスクリプトファイルはスクリプトなので、シェルインタプリタの代わりにシェルインタプリタをbash使用して実行する必要があります。bashsh

#!スクリプトには正しい -lines があるため、./main.shスクリプトが実行可能な場合は、コマンドライン()から直接実行することで正しい操作を実行する必要があります。


shスクリプトでは、関数は次のように定義されています。

somefuctionname () {
    somefunctionbody
}

キーワードを使用する代わりに(ドット)functionも使用する場合、スクリプトは.source会議sh他の特殊機能を使用しない限り、すでにbash。で実行できます。

関連情報