У меня был скрипт, который работал нормально, но когда я запустил его сегодня, он говорит declare: not found. Я использую оболочку bash и путь в начале скрипта.
В моем скрипте две строки с флагом:
declare -a RESPONSE
RESPONSE=($RESULT)
В нем также говорится, что ( но я думаю, что это происходит из-за первой ошибки.
declare | grep USER показывает
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Итак, что здесь не так?
Я использую Ubuntu 14.04 64 бит. Поместите этот код в файл:
#! / Bin / sh declare -i FOOBAR = 12; echo $ FOOBAR;
Запустите его так:
el @ apollo: ~ $ ./06.sh ./test.sh: 2: ./test.sh : declare: not found
Чтобы исправить это, сделайте это вместо:
#! / bin / bash declare -i FOOBAR = 12; echo $ FOOBAR;
Отпечатки:
el @ apollo: ~ $ ./06.sh 12
У меня была такая же проблема, и тогда я вспомнил, что вам нужно назначить правильные разрешения для запуска сценария оболочки.
Изменить разрешение скрипта, например:
chmod 755 script.sh
Попробуйте запустить скрипт, используя / bin / bash
вместо командной строки, если sh
(:
Вместо:
] sh script.sh
Попробуйте:
/ bin / bash script.sh
Я использую Ubuntu 14.04 64 бит. Поместите этот код в файл:
#! / Bin / sh declare -i FOOBAR = 12; echo $ FOOBAR;
Запустите его так:
el @ apollo: ~ $ ./06.sh ./test.sh: 2: ./test.sh : declare: not found
Чтобы исправить это, сделайте это вместо:
#! / bin / bash declare -i FOOBAR = 12; echo $ FOOBAR;
Отпечатки:
el @ apollo: ~ $ ./06.sh 12
Я подозреваю, что ваша строка «shebang» (необязательная первая строка файла) ссылается на sh
вместо bash
. Это должно быть
#! / Bin / bash
для сценариев bash. Если первая строка вашего скрипта -
#! / Bin / sh
, то это указывает на то, что должна использоваться строго борнская совместимая оболочка ; в случае Ubuntu используется тире
. Во многих других дистрибутивах это не вызывает проблемы, поскольку они связывают / bin / sh
с / bin / bash
; однако ubuntu ссылается на / bin / dash
, чтобы позволить системным скриптам работать быстрее.
declare
builtin является одним из bash
- множество расширений к спецификации сценария оболочки Bourne; dash
просто реализует эту спецификацию без расширений.
У меня была такая же проблема, и тогда я вспомнил, что вам нужно назначить правильные разрешения для запуска сценария оболочки.
Изменить разрешение скрипта, например:
chmod 755 script.sh
Попробуйте запустить скрипт, используя / bin / bash
вместо командной строки, если sh
(:
Вместо:
] sh script.sh
Попробуйте:
/ bin / bash script.sh
Я использую Ubuntu 14.04 64 бит. Поместите этот код в файл:
#! / Bin / sh declare -i FOOBAR = 12; echo $ FOOBAR;
Запустите его так:
el @ apollo: ~ $ ./06.sh ./test.sh: 2: ./test.sh : declare: not found
Чтобы исправить это, сделайте это вместо:
#! / bin / bash declare -i FOOBAR = 12; echo $ FOOBAR;
Отпечатки:
el @ apollo: ~ $ ./06.sh 12
Я подозреваю, что ваша строка «shebang» (необязательная первая строка файла) ссылается на sh
вместо bash
. Это должно быть
#! / Bin / bash
для сценариев bash. Если первая строка вашего скрипта -
#! / Bin / sh
, то это указывает на то, что должна использоваться строго борнская совместимая оболочка ; в случае Ubuntu используется тире
. Во многих других дистрибутивах это не вызывает проблемы, поскольку они связывают / bin / sh
с / bin / bash
; однако ubuntu ссылается на / bin / dash
, чтобы позволить системным скриптам работать быстрее.
declare
builtin является одним из bash
- множество расширений к спецификации сценария оболочки Bourne; dash
просто реализует эту спецификацию без расширений.
sh thescript.sh
, интерпретация его sh
shell, то есть тире
.
– intuited
27 February 2011 в 20:57
sh script.sh
. Я понимаю, что вы сказали, но я где-то читал, что с помощью этого метода bash
будет его интерпретировать. Почему dash
получит здесь роль? Это только с Ubuntu? Может быть, то, что я читал, было для Linux в целом.
– Ashfame
27 February 2011 в 22:03
sh script
вы используете команду sh
с аргументом script
, что делает sh read и выполняет команды в этом файле. Шейнг не читается sh, он начинается с #
, поэтому он рассматривается как комментарий. Если вы вместо этого запустите ./ script
, то ядро будет читать shebang, который в вашем случае #! / Bin / bash
, и поэтому он выполняет / bin / bash ./script
– geirha
27 February 2011 в 22:48
dash
будет использоваться, поэтому мне нужно его прояснить
– Ashfame
28 February 2011 в 00:09
У меня была такая же проблема, и тогда я вспомнил, что вам нужно назначить правильные разрешения для запуска сценария оболочки.
Изменить разрешение скрипта, например:
chmod 755 script.sh