Problema con lo script Bash: 'declare: not found'

20

Avevo uno script che funzionava bene, ma quando lo ho eseguito oggi, dice declare: not found . Sto usando bash shell e il percorso all'inizio dello script è corretto.

Due righe contrassegnate nel mio script sono le seguenti:

declare -a RESPONSE
RESPONSE=($RESULT)

Si dice anche che ( è inaspettato ma suppongo che stia arrivando a causa del primo errore. Degno di menzione è quando scrivo direttamente funziona correttamente.

declare | grep USER mostra

USER=ashfame
USERNAME=ashfame
           values="$SVN_BASH_USERNAME";

Quindi, cosa c'è di sbagliato qui?

    
posta Ashfame 27.02.2011 - 15:14

6 risposte

25

Stai utilizzando sh anziché bash ? sh (collegato a dash ) non supporta declare parola chiave, né la sintassi

VAR=(list) 

per inizializzare gli array.

    
risposta data enzotib 27.02.2011 - 16:35
10

Sospetto che la tua linea "shebang" (la prima riga opzionale del file) faccia riferimento a sh anziché bash . Dovrebbe essere

#!/bin/bash

per gli script di bash. Se la prima riga del tuo script è

#!/bin/sh

allora ciò indicherebbe che una shell strettamente boreale deve essere usata; nel caso di Ubuntu, viene utilizzato dash . In molte altre distribuzioni, questo non causa problemi, perché collegano /bin/sh a /bin/bash ; tuttavia, i collegamenti ubuntu a /bin/dash per consentire agli script di sistema di funzionare più rapidamente.

Il% built-in di% co_de è una delle estensioni di declare alla specifica dello script della shell Bourne; bash implementa semplicemente quella specifica senza estensioni.

    
risposta data intuited 27.02.2011 - 16:46
3

Come riprodurre l'errore precedente:

Sto usando Ubuntu 14.04 a 64 bit. Inserisci questo codice in un file:

#!/bin/sh 
declare -i FOOBAR=12; 
echo $FOOBAR; 

Esegui in questo modo:

[email protected]:~$ ./06.sh 
./test.sh: 2: ./test.sh: declare: not found

Per risolvere il problema, fallo invece:

#!/bin/bash
declare -i FOOBAR=12;
echo $FOOBAR;

Stampe:

[email protected]:~$ ./06.sh 
12
    
risposta data Eric Leschinski 04.06.2014 - 02:23
1

Su Ubuntu, potresti avere uno script che sta eseguendo altri script al suo interno, in cui mi sono imbattuto.

some_dir/  
        | main.sh  
        | shhh.sh

#!/bin/bash -e

echo "file? $0"
# file? ./main.sh

echo "shell? $SHELL" 
# shell? /bin/bash

# sh shhh.sh
# file? shhh.sh
# shell? /bin/bash
# shhh.sh: 5: shhh.sh: declare: not found

$SHELL shhh.sh
# file? shhh.sh
# shell? /bin/bash
# foo? bar

#!/bin/bash -e

echo "file? $0"
# shhh.sh

echo "shell? $SHELL"
# shell? /bin/bash

declare foo="bar"

echo "foo? $foo"

Cambiando tutto sh some_script.sh in $SHELL some_script.sh risolto.

    
risposta data 14.11.2018 - 20:59
1

Ho avuto lo stesso problema, quindi mi sono ricordato che è necessario assegnare le autorizzazioni appropriate per eseguire lo script della shell.

Modifica dell'autorizzazione dello script, ad esempio:

chmod 755 script.sh
    
risposta data Edgard Padilla 05.06.2012 - 21:39
1

Prova a eseguire lo script utilizzando /bin/bash nella riga di comando, invece se sh (:

Invece di:

    sh script.sh

Prova:

    /bin/bash script.sh
    
risposta data SkillFull 18.05.2017 - 07:45

Leggi altre domande sui tag