Problema com o script Bash: 'declarar: não encontrado'

19

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?

    
por Ashfame 27.02.2011 / 15:14

5 respostas

23

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.

    
por enzotib 27.02.2011 / 16:35
10

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.

    
por intuited 27.02.2011 / 16:46
3

Como reproduzir o erro acima:

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
    
por Eric Leschinski 04.06.2014 / 02:23
1

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
    
por Edgard Padilla 05.06.2012 / 21:39
1

Tente executar o script usando /bin/bash na linha de comando, se sh (:

Em vez de:

    sh script.sh

Tente:

    /bin/bash script.sh
    
por Walk 18.05.2017 / 07:45