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

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

Существует папка с именем 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, как говорится в руководстве.

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

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

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

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

3 ответа

Ваш скрипт не установлен как исполняемый;

У вас есть два варианта:

При создании пакета убедитесь, что ваш скрипт имеет исполняемый бит, установленный перед созданием пакета, запустив его в вашем рабочем каталоге. Перед созданием пакета: chmod +x /path/to/script.sh

OR ...

При создании пакета , убедитесь, что ваш скрипт имеет исполняемый бит, установленный перед созданием пакета, запустив его в своем рабочем каталоге. Перед созданием пакета: chmod +x /path/to/script.sh

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

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

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

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

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

ИЛИ ... Правильный способ сделать это - это просто упаковать сценарий как myscript и не включать расширение оболочки. Затем вы должны включить строку shebang в начале (#!), указывающую на использование интерпретатора. Поскольку .sh может быть чем угодно. Затем настройте пакет, чтобы установить myscript. Как сказал муру, вам следует избегать ссылок на ваш пост, но вам решать, что вы хотите сделать. Есть много убедитесь, что способы достижения вашей цели, но не очень строгое руководство в документации для упаковки.

8
ответ дан 22 May 2018 в 17:03
  • 1
    Это postinst или .postinst? – George Udosen 12 December 2017 в 01:46
  • 2
    @GeorgeUdosen Простой postinst, если исходный пакет создает только один двоичный пакет или <packagename>.postinst, если создано несколько бинарных пакетов. – muru 12 December 2017 в 05:25
  • 3
    Ничего из этого не должно быть сделано в postinst, IMO. Разрешения и ссылки на файлы должны быть частью пакета, если они не могут быть (например, если ссылка находится где-то в /usr/local или в части системы альтернатив). В противном случае вам нужно позаботиться о своем postrm, чтобы удалить ссылки. – muru 12 December 2017 в 05:28

Ваш скрипт не установлен как исполняемый;

У вас есть два варианта:

При создании пакета убедитесь, что ваш скрипт имеет исполняемый бит, установленный перед созданием пакета, запустив его в вашем рабочем каталоге. Перед созданием пакета: chmod +x /path/to/script.sh

OR ...

При создании пакета , убедитесь, что ваш скрипт имеет исполняемый бит, установленный перед созданием пакета, запустив его в своем рабочем каталоге. Перед созданием пакета: chmod +x /path/to/script.sh

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

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

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

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

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

ИЛИ ... Правильный способ сделать это - это просто упаковать сценарий как myscript и не включать расширение оболочки. Затем вы должны включить строку shebang в начале (#!), указывающую на использование интерпретатора. Поскольку .sh может быть чем угодно. Затем настройте пакет, чтобы установить myscript. Как сказал муру, вам следует избегать ссылок на ваш пост, но вам решать, что вы хотите сделать. Есть много убедитесь, что способы достижения вашей цели, но не очень строгое руководство в документации для упаковки.

8
ответ дан 18 July 2018 в 01:22

Ваш скрипт не установлен как исполняемый;

У вас есть два варианта:

При создании пакета убедитесь, что ваш скрипт имеет исполняемый бит, установленный перед созданием пакета, запустив его в вашем рабочем каталоге. Перед созданием пакета: chmod +x /path/to/script.sh

OR ...

При создании пакета , убедитесь, что ваш скрипт имеет исполняемый бит, установленный перед созданием пакета, запустив его в своем рабочем каталоге. Перед созданием пакета: chmod +x /path/to/script.sh

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

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

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

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

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

ИЛИ ... Правильный способ сделать это - это просто упаковать сценарий как myscript и не включать расширение оболочки. Затем вы должны включить строку shebang в начале (#!), указывающую на использование интерпретатора. Поскольку .sh может быть чем угодно. Затем настройте пакет, чтобы установить myscript. Как сказал муру, вам следует избегать ссылок на ваш пост, но вам решать, что вы хотите сделать. Есть много убедитесь, что способы достижения вашей цели, но не очень строгое руководство в документации для упаковки.

8
ответ дан 24 July 2018 в 17:23

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

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