Проблема с скриптом Bash: 'declare: not found'

18

У меня был скрипт, который работал нормально, но когда я запустил его сегодня, он говорит declare: not found . Я использую оболочку bash и путь в начале сценария правильно.

В моем скрипте две строки с флагом:

declare -a RESPONSE
RESPONSE=($RESULT)

Он также говорит, что ( неожиданно, но я думаю, что это происходит из-за первой ошибки. Стоит упомянуть, что когда я печатаю объявление, прямо работает нормально.

declare | grep USER показывает

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

Итак, что здесь не так?

    
задан Ashfame 27.02.2011 в 15:14
источник

5 ответов

21

Используете ли вы sh вместо bash ? sh (связанное с dash ) не поддерживает ключевое слово declare , а также синтаксис

VAR=(list) 

для инициализации массивов.

    
ответ дан enzotib 27.02.2011 в 16:35
источник
10

Я подозреваю, что ваша строка «shebang» (необязательная первая строка файла) ссылается на sh вместо bash . Это должно быть

#!/bin/bash

для сценариев bash. Если первая строка вашего скрипта

#!/bin/sh

, то это указывает на то, что должна использоваться строго борнская совместимая оболочка; в случае Ubuntu используется dash . Во многих других дистрибутивах это не вызывает проблемы, поскольку они связывают /bin/sh с /bin/bash ; однако ubuntu ссылается на /bin/dash , чтобы позволить системным скриптам работать быстрее.

Встроенный declare является одним из многих расширений bash для спецификации сценария оболочки Bourne; dash просто реализует эту спецификацию без расширений.

    
ответ дан intuited 27.02.2011 в 16:46
3

Как воспроизвести приведенную выше ошибку:

Я использую Ubuntu 14.04 64 бит. Поместите этот код в файл:

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

Запустите его следующим образом:

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

Чтобы исправить это, сделайте это вместо этого:

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

Печать

[email protected]:~$ ./06.sh 
12
    
ответ дан Eric Leschinski 04.06.2014 в 02:23
1

У меня была такая же проблема, и затем я вспомнил, что вам нужно назначить правильные разрешения для выполнения сценария оболочки.

Изменить разрешение скрипта, например:

chmod 755 script.sh
    
ответ дан Edgard Padilla 05.06.2012 в 21:39
1

Попробуйте запустить скрипт, используя /bin/bash в командной строке, вместо sh (:

Вместо:

    sh script.sh

Попробуйте:

    /bin/bash script.sh
    
ответ дан Sonu 18.05.2017 в 07:45