Обнаружить отмену zenity, когда скрипт запущен как sudo [duplicate]

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

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

declare -a RESPONSE RESPONSE=($RESULT)

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

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

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

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

20
задан 27 February 2011 в 18:42

40 ответов

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

Я использую 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  
3
ответ дан 7 August 2018 в 00:18

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

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

   chmod 755 script.sh  
1
ответ дан 7 August 2018 в 00:18

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

Вместо:

  ] sh script.sh 

Попробуйте:

 / bin / bash script.sh 
1
ответ дан 9 August 2018 в 04:41

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

Я использую 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  
3
ответ дан 9 August 2018 в 04:41

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

  #! / Bin / bash  

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

  #! / Bin / sh  

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

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

10
ответ дан 9 August 2018 в 04:41

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

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

   chmod 755 script.sh  
1
ответ дан 9 August 2018 в 04:41

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

Вместо:

  ] sh script.sh 

Попробуйте:

 / bin / bash script.sh 
1
ответ дан 14 August 2018 в 23:38

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

Я использую 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  
3
ответ дан 14 August 2018 в 23:38

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

  #! / Bin / bash  

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

  #! / Bin / sh  

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

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

10
ответ дан 14 August 2018 в 23:38
  • 1
    Моя линия shebang - только #! / Bin / bash – Ashfame 27 February 2011 в 20:06
  • 2
    @Ashfame: как вы запускаете скрипт? Если вы вызываете его, просто набрав имя скрипта, строка shebang определит, что интерпретатор запускает его. Однако, если вы явно вызываете его через sh thescript.sh , интерпретация его sh shell, то есть тире . – intuited 27 February 2011 в 20:57
  • 3
    @intuited Я запускал его через sh script.sh . Я понимаю, что вы сказали, но я где-то читал, что с помощью этого метода bash будет его интерпретировать. Почему dash получит здесь роль? Это только с Ubuntu? Может быть, то, что я читал, было для Linux в целом. – Ashfame 27 February 2011 в 22:03
  • 4
    @Ashfame с sh script вы используете команду sh с аргументом script , что делает sh read и выполняет команды в этом файле. Шейнг не читается sh, он начинается с # , поэтому он рассматривается как комментарий. Если вы вместо этого запустите ./ script , то ядро ​​будет читать shebang, который в вашем случае #! / Bin / bash , и поэтому он выполняет / bin / bash ./script – geirha 27 February 2011 в 22:48
  • 5
    @geirha да, я знаю, что это работает, но @intuited упомянул, что dash будет использоваться, поэтому мне нужно его прояснить – Ashfame 28 February 2011 в 00:09

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

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

   chmod 755 script.sh  
1
ответ дан 14 August 2018 в 23:38

Другие вопросы по тегам:

Похожие вопросы: