我有两个文件如下
通用函数.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
脚本,因此您应该使用bash
shell 解释器而不是sh
shell 解释器来运行它们。
#!
脚本中有正确的-line,因此./main.sh
只要脚本可执行,直接从命令行 ( ) 运行它就应该做正确的事情。
在sh
脚本中,函数是使用以下方式定义的
somefuctionname () {
somefunctionbody
}
而不是使用关键字function
.如果您还使用.
(点) 代替source
,则脚本会已经能够在 下运行sh
,除非使用了其他特殊bash
功能。