incapaz de ler funções do script bash [closed]

0

Eu tenho dois arquivos como abaixo

genericfunctions.sh

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

main.sh

#!/bin/bash

echo "BootStrap Started"

source /tmp/genericfunctions.sh

sudo apt-get update

InstallDotNetCore
InstallMdsHooks


echo "Bootstrap complete"

erro:

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

: Bootstrap concluído:

Nenhuma das funções do arquivo1 está sendo chamada do arquivo2. Eu tentei simplesmente dar ./tmp/file1.sh. estava acionando todas as funções no arquivo1. Quero acionar apenas funções específicas.

qualquer ajuda é muito apreciada.

    
por Bobby 27.02.2018 / 22:59

1 resposta

4

Como os dois arquivos de script são bash scripts, você deve executá-los usando o intérprete bash shell, não o intérprete sh shell.

Você tem a% correta#! -line no script, portanto, executá-la diretamente da linha de comando ( ./main.sh ) deve fazer a coisa certa, contanto que o script seja executável.

Em sh scripts, as funções são definidas usando

somefuctionname () {
    somefunctionbody
}

em vez de usar a palavra-chave function . Se você também usa . (ponto) no lugar de source , o script seria capaz de ser executado em sh , a menos que tenha usado outros recursos especiais de bash .

    
por 27.02.2018 / 23:46