У меня был скрипт, который работал нормально, но когда я запускал его сегодня, он говорит declare: not found
. Я использую оболочку bash и путь при запуске скрипта правильный.
Две помеченные строки в моем скрипте следующие:
declare -a RESPONSE
RESPONSE=($RESULT)
Это также говорит, что (
это неожиданно, но я думаю, что это происходит из-за первой ошибки. Стоит упомянуть, что когда я набираю, объявлять напрямую работает нормально.
declare | grep USER
шоу
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Итак, что здесь не так?
#!/bin/bash
только. Вы имели в виду, как я выполняю это? Я просто попытался выполнить это так,./script.sh
и это сработало. Но это не работает какscript.sh
или,sh script.sh
и я почти уверен, что использовал два последних метода, когда создавал их неделю назад. Чем это можно объяснить?Я подозреваю, что ваша строка "shebang" (необязательная первая строка файла) ссылается
sh
вместоbash
. Должен бытьдля скриптов bash. Если первая строка вашего скрипта
тогда это будет указывать на то, что должна использоваться строго совместимая с борном оболочка; в случае Ubuntu,
dash
используется. Во многих других дистрибутивах это не вызывает проблем, потому что они ссылаются/bin/sh
на/bin/bash
; однако ubuntu ссылается на него/bin/dash
, чтобы системные скрипты работали быстрее.declare
Встроенный в один изbash
«S многих расширений спецификации сценариев Bourne оболочки;dash
просто реализует эту спецификацию без расширений.источник
#!/bin/bash
Только моя линияsh thescript.sh
,sh
оболочка - т.е.dash
будет интерпретировать это.sh script.sh
. Я понимаю, что вы сказали, но я где-то читал, что с помощью этого метода,bash
будет интерпретировать это. Зачемdash
ему здесь роль? Это только с Ubuntu? Может быть, то, что я прочитал, было для Linux в целом.sh script
вами запускает командуsh
с аргументомscript
, который заставляет sh читать и выполнять команды в этом файле. Shbang не читается sh, он начинается с a#
, поэтому рассматривается как комментарий. Если вы вместо этого запустите./script
, то ядро прочитает shebang, который в вашем случае есть#!/bin/bash
, и поэтому он выполняет/bin/bash ./script
dash
будет использоваться, поэтому мне нужно уточнить этоКак воспроизвести вышеуказанную ошибку:
Я использую Ubuntu 14.04 64 бит. Поместите этот код в файл:
Запустите это так:
Чтобы это исправить, сделайте это вместо этого:
Печать:
источник
У меня была та же проблема, и затем я вспомнил, что вам нужно назначить нужные разрешения для выполнения сценария оболочки.
Изменить разрешение скрипта, например:
источник
Попробуйте
/bin/bash
вместо этого запустить скрипт, используя в командной строке ifsh
(:Вместо того :
Пытаться :
источник
В Ubuntu у вас может быть скрипт, который выполняет другие скрипты внутри него, с которым я столкнулся.
Меняя все,
sh some_script.sh
чтобы$SHELL some_script.sh
исправить это.источник