Обнаружить отмену 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 ответов

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

VAR=(list)

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

22
ответ дан 24 July 2018 в 22:36
  • 1
    Моя линия shebang - #!/bin/bash. Вы имели в виду, как я это выполняю? Я просто попытался выполнить его как ./script.sh, и он сработал. Но это не работает как script.sh или sh script.sh, и я почти уверен, что использовал только последние два метода, когда я создал его неделю назад. Что это может объяснить? – Ashfame 27 February 2011 в 20:22
  • 2
    @Ashfame: возможно, неделю назад он пропустил функции, характерные для bash, которые у вас есть сейчас, поэтому он также работал с sh script.sh – enzotib 27 February 2011 в 20:40
  • 3
    Нет, я имел в виду именно этот сценарий, который работал неделю или две недели назад. Или вы имели в виду, что какое-то обновление, возможно, внесло изменения? – Ashfame 27 February 2011 в 20:42
  • 4
    @Ashfame: я не знаю, этот скрипт, как вы сейчас показываете, не может работать с sh script.sh. – enzotib 27 February 2011 в 20:49
  • 5
    хорошо, может быть, я ошибаюсь. Благодаря! :) – Ashfame 27 February 2011 в 20:54

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

VAR=(list)

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

22
ответ дан 1 August 2018 в 01:31

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

VAR=(list)

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

22
ответ дан 2 August 2018 в 20:26

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

VAR=(list)

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

22
ответ дан 3 August 2018 в 22:47

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

  VAR = (список  )  

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

22
ответ дан 5 August 2018 в 06:54

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

  VAR = (список  )  

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

23
ответ дан 7 August 2018 в 00:18

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

  VAR = (список  )  

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

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

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

  VAR = (список  )  

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

23
ответ дан 14 August 2018 в 23:38
  • 1
    Моя линия shebang - #! / Bin / bash . Вы имели в виду, как я это выполняю? Я просто попытался выполнить его как ./ script.sh , и он сработал. Но это не работает как script.sh или sh script.sh , и я почти уверен, что использовал только последние два метода, в то время как я создал его неделю тому назад. Что это может объяснить? – Ashfame 27 February 2011 в 20:22
  • 2
    @Ashfame: возможно, неделю назад он пропустил функции, характерные для bash, которые у вас есть сейчас, поэтому он также работал с sh script.sh – enzotib 27 February 2011 в 20:40
  • 3
    Нет, я имел в виду именно этот сценарий, который работал неделю или две недели назад. Или вы имели в виду, что какое-то обновление, возможно, внесло изменения? – Ashfame 27 February 2011 в 20:42
  • 4
    @Ashfame: я не знаю, этот скрипт, как вы сейчас показываете, не может работать с sh script.sh. – enzotib 27 February 2011 в 20:49
  • 5
    хорошо, может быть, я ошибаюсь. Благодаря! :) – Ashfame 27 February 2011 в 20:54

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

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

chmod 755 script.sh
1
ответ дан 24 July 2018 в 22:36

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

Я использую 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
ответ дан 24 July 2018 в 22:36

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

#!/bin/bash

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

#!/bin/sh

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

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

10
ответ дан 24 July 2018 в 22:36
  • 1
    Моя строка shebang только #!/bin/bash – Ashfame 27 February 2011 в 20:06
  • 2
    @Ashfame: как вы запускаете скрипт? Если вы вызываете его, просто набрав имя скрипта, строка shebang определит, что интерпретатор запускает его. Однако, если вы явно вызываете его через sh thescript.sh, интерпретатор интерпретирует оболочку sh, то есть dash. – 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 и выполняет команды в этом файле. Shebang не читается sh, он начинается с #, поэтому он рассматривается как комментарий. Если вы вместо этого запустите ./script, ядро ​​будет читать shebang, который в вашем случае #!/bin/bash, и поэтому он выполняет /bin/bash ./script – geirha 27 February 2011 в 22:48
  • 5
    @geirha yes thats, как я знаю, что это работает, но @intuited упомянул, что dash будет использоваться, поэтому мне нужно его прояснить – Ashfame 28 February 2011 в 00:09

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

Вместо:

sh script.sh

Попробуйте:

/bin/bash script.sh
1
ответ дан 24 July 2018 в 22:36

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

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

chmod 755 script.sh
1
ответ дан 1 August 2018 в 01:31

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

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

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

#!/bin/bash

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

#!/bin/sh

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

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

10
ответ дан 1 August 2018 в 01:31
  • 1
    Моя строка shebang только #!/bin/bash – Ashfame 27 February 2011 в 20:06
  • 2
    @Ashfame: как вы запускаете скрипт? Если вы вызываете его, просто набрав имя скрипта, строка shebang определит, что интерпретатор запускает его. Однако, если вы явно вызываете его через sh thescript.sh, интерпретатор интерпретирует оболочку sh, то есть dash. – 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 и выполняет команды в этом файле. Shebang не читается sh, он начинается с #, поэтому он рассматривается как комментарий. Если вы вместо этого запустите ./script, ядро ​​будет читать shebang, который в вашем случае #!/bin/bash, и поэтому он выполняет /bin/bash ./script – geirha 27 February 2011 в 22:48
  • 5
    @geirha yes thats, как я знаю, что это работает, но @intuited упомянул, что dash будет использоваться, поэтому мне нужно его прояснить – Ashfame 28 February 2011 в 00:09

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

Вместо:

sh script.sh

Попробуйте:

/bin/bash script.sh
1
ответ дан 1 August 2018 в 01:31

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

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

chmod 755 script.sh
1
ответ дан 2 August 2018 в 20:26

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

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

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

#!/bin/bash

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

#!/bin/sh

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

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

10
ответ дан 2 August 2018 в 20:26
  • 1
    Моя строка shebang только #!/bin/bash – Ashfame 27 February 2011 в 20:06
  • 2
    @Ashfame: как вы запускаете скрипт? Если вы вызываете его, просто набрав имя скрипта, строка shebang определит, что интерпретатор запускает его. Однако, если вы явно вызываете его через sh thescript.sh, интерпретатор интерпретирует оболочку sh, то есть dash. – 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 и выполняет команды в этом файле. Shebang не читается sh, он начинается с #, поэтому он рассматривается как комментарий. Если вы вместо этого запустите ./script, ядро ​​будет читать shebang, который в вашем случае #!/bin/bash, и поэтому он выполняет /bin/bash ./script – geirha 27 February 2011 в 22:48
  • 5
    @geirha yes thats, как я знаю, что это работает, но @intuited упомянул, что dash будет использоваться, поэтому мне нужно его прояснить – Ashfame 28 February 2011 в 00:09

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

Вместо:

sh script.sh

Попробуйте:

/bin/bash script.sh
1
ответ дан 2 August 2018 в 20:26

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

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

chmod 755 script.sh
1
ответ дан 3 August 2018 в 22:47

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

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

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

#!/bin/bash

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

#!/bin/sh

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

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

10
ответ дан 3 August 2018 в 22:47
  • 1
    Моя строка shebang только #!/bin/bash – Ashfame 27 February 2011 в 20:06
  • 2
    @Ashfame: как вы запускаете скрипт? Если вы вызываете его, просто набрав имя скрипта, строка shebang определит, что интерпретатор запускает его. Однако, если вы явно вызываете его через sh thescript.sh, интерпретатор интерпретирует оболочку sh, то есть dash. – 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 и выполняет команды в этом файле. Shebang не читается sh, он начинается с #, поэтому он рассматривается как комментарий. Если вы вместо этого запустите ./script, ядро ​​будет читать shebang, который в вашем случае #!/bin/bash, и поэтому он выполняет /bin/bash ./script – geirha 27 February 2011 в 22:48
  • 5
    @geirha yes thats, как я знаю, что это работает, но @intuited упомянул, что dash будет использоваться, поэтому мне нужно его прояснить – Ashfame 28 February 2011 в 00:09

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

Вместо:

sh script.sh

Попробуйте:

/bin/bash script.sh
1
ответ дан 3 August 2018 в 22:47

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

Вместо:

  ] sh script.sh 

Попробуйте:

 / bin / bash script.sh 
1
ответ дан 5 August 2018 в 06:54

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

  #! / Bin / bash  

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

  #! / Bin / sh  

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

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

10
ответ дан 5 August 2018 в 06:54

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

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

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

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

   chmod 755 script.sh  
1
ответ дан 5 August 2018 в 06:54

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

Вместо:

  ] sh script.sh 

Попробуйте:

 / bin / bash script.sh 
1
ответ дан 7 August 2018 в 00:18

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

  #! / Bin / bash  

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

  #! / Bin / sh  

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

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

10
ответ дан 7 August 2018 в 00:18

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

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