Você está usando sh
em vez de bash
? sh
(ligado a dash
) não suporta declare
palavra-chave nem a sintaxe
VAR=(list)
para inicializar matrizes.
Eu tinha um script que estava rodando bem, mas quando o rodei hoje, ele diz declare: not found
. Eu estou usando bash shell e caminho no início do script está correto.
Duas linhas sinalizadas no meu script são as seguintes:
declare -a RESPONSE
RESPONSE=($RESULT)
Ele também diz que (
é inesperado, mas acho que está chegando devido ao primeiro erro.
Vale a pena mencionar o ponto é quando eu digito declarar diretamente funciona bem.
declare | grep USER
mostra
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Então, o que há de errado aqui?
Você está usando sh
em vez de bash
? sh
(ligado a dash
) não suporta declare
palavra-chave nem a sintaxe
VAR=(list)
para inicializar matrizes.
Suspeito que sua linha "shebang" (a primeira linha opcional do arquivo) esteja referenciando sh
em vez de bash
. Deve ser
#!/bin/bash
para scripts bash. Se a primeira linha do seu script for
#!/bin/sh
então isso indicaria que um shell estritamente compatível com bourne deve ser usado; no caso do Ubuntu, dash
é usado. Em muitas outras distribuições, isso não causa um problema, porque eles vinculam /bin/sh
a /bin/bash
; no entanto, os links do Ubuntu para /bin/dash
para permitir que os scripts do sistema sejam executados mais rapidamente.
O declare
builtin é uma das muitas extensões do bash
para a especificação do script de shell Bourne; dash
apenas implementa essa especificação sem extensões.
Estou usando o Ubuntu 14.04 de 64 bits. Coloque este código em um arquivo:
#!/bin/sh
declare -i FOOBAR=12;
echo $FOOBAR;
Execute assim:
el@apollo:~$ ./06.sh
./test.sh: 2: ./test.sh: declare: not found
Para corrigir isso, faça isso:
#!/bin/bash
declare -i FOOBAR=12;
echo $FOOBAR;
Impressões:
el@apollo:~$ ./06.sh
12
Eu tive o mesmo problema e lembrei-me de que você precisava atribuir as permissões certas para executar o script de shell.
Altere a permissão do script, por exemplo:
chmod 755 script.sh
Tente executar o script usando /bin/bash
na linha de comando, se sh
(:
Em vez de:
sh script.sh
Tente:
/bin/bash script.sh