Не могу запустить скрипт из моего собственного пакета

Я создал простой пакет, используя это руководство , но я не могу запустить скрипт внутри него.

Существует папка с именем mypack, которая включает в себя /usr/bin/myscript.sh с какой-то командой (скажем, это просто повторяет сообщение типа «Hello World») и папку с именем DEBIAN с control файл с этим текстом внутри:

Package: mypack
Version: 1.0-1
Maintainer: Alex
Architecture: all
Section: misc
Description: echo me

Я собрал и установил его, используя dpkg-deb --build mypack; dpkg -i mypack.deb как говорится в руководстве.

Наконец, когда я захотел запустить скрипт-скрипт, чтобы посмотреть, работает ли он, я не смог. Я пытался:

  1. myscript (возвращает myscript: command not found)
  2. myscript.sh (возвращает bash: /usr/bin/myscript.sh: Permission denied)
  3. sudo myscript.sh (возвращает sudo: myscript.sh: command not found ])
  4. mypack myscript и mypack myscript.sh (оба возвращают mypack: command not found)

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

6
задан 12 December 2017 в 04:24

1 ответ

Ваш скрипт не установлен как исполняемый; Точно так же, как скрипт , а не , установленный упаковкой, вам нужно убедиться, что в нем установлен исполняемый бит.

У вас есть две опции:

  1. При создании пакета убедитесь, что в вашем скрипте установлен исполняемый бит до создания пакета, запустив его в Ваш рабочий каталог Перед сборкой пакета:

    chmod +x /path/to/script.sh

ИЛИ ...

  1. Используйте скрипт postinst для вашего пакета, чтобы установить исполняемый бит после установки . Добавьте команду в скрипт .postinst, подобный следующему:

    chmod +x /usr/bin/myscript.sh

Для некоторых своих вещей я использую оба метода , просто , чтобы убедиться в этом устанавливает вещи как исполняемые. Это иногда вызывает головную боль, но лучше убедиться , чем не убедиться. По крайней мере, на мой взгляд.


Что касается сценария, который не может быть выполнен как myscript, то это потому, что myscript и myscript.sh являются различными объектами .

Если вы хотите, сделайте следующее в вашем скрипте .postinst для вашего пакета:

ln -s /usr/bin/myscript.sh /usr/bin/myscript

... и затем, если вы решите проблему с исполняемым битом, она должна «просто работать» для обеих версий, которые вы пробовали, как myscript.sh, так и myscript.

ОДНАКО правильный способ сделать это - вместо этого просто упаковать скрипт как myscript и не включать расширение оболочки. Затем вы должны включить в начале строку Шебанга (#!), указывающую, какой интерпретатор использовать. С .sh могло быть что угодно. Затем установите пакет для установки myscript. Как сказал Муру, вам следует избегать размещения ссылок в своем посте, но решать, что вы хотите делать, решать вам. Существует много различных способов достижения вашей цели, но не очень много строгих указаний в документации по упаковке.

8
ответ дан 12 December 2017 в 04:24

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

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