Não forneça o script ( source script
ou . script
).
Em vez disso, basta executar normalmente script
.
Eu tenho um script sh (shebang #!/bin/sh
) ( sh.sh
) que chama um sub-script bash (shebang #!/bin/bash
):
. "some-path/bash.sh"
No script bash eu tenho uma declaração de um array associativo: declare -A properties
, obtendo assim o erro declare: not found
.
É óbvio porque declare
não é encontrado porque o script pai é um script sh e não é um bash.
Existe uma maneira de forçar a sintaxe do bash?
Outra maneira é abrir um novo shell, mas é problemático porque o objetivo do subíndice é definir variáveis a serem usadas no script pai. Sub-shells não devem estar mexendo com a variável dos pais.
Pai (sh.sh):
#!/bin/sh
. "some-path/bash.sh"
Filho (bash.sh):
#!/bin/bash
declare -A properties
Uso que eu estava tentando:
./sh.sh
Não forneça o script ( source script
ou . script
).
Em vez disso, basta executar normalmente script
.
Em vez de executar o script pai como: ./sh.sh
, executei-o usando bash: bash sh.sh
. Trabalhou.
Eu tenho uma suposição escondida de que sh é um subconjunto do bash. Não tenho certeza se está correto, mas funcionou.
Tags bash shell shell-script dash