次のように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
使用して実行する必要があります。bash
sh
#!
スクリプトには正しい -lines があるため、./main.sh
スクリプトが実行可能な場合は、コマンドライン()から直接実行することで正しい操作を実行する必要があります。
sh
スクリプトでは、関数は次のように定義されています。
somefuctionname () {
somefunctionbody
}
キーワードを使用する代わりに(ドット)function
も使用する場合、スクリプトは.
source
会議sh
他の特殊機能を使用しない限り、すでにbash
。で実行できます。