Я создал простой пакет, используя это руководство , но я не могу запустить скрипт внутри него.
Существует папка с именем 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
) Как я могу выполнить его тогда, чтобы он действительно работал, или я пропустил некоторые важные шаги , что не позволяет мне запустить скрипт?
Ваш скрипт не установлен как исполняемый; Точно так же, как скрипт , а не , установленный упаковкой, вам нужно убедиться, что в нем установлен исполняемый бит.
У вас есть две опции:
При создании пакета убедитесь, что в вашем скрипте установлен исполняемый бит до создания пакета, запустив его в Ваш рабочий каталог Перед сборкой пакета:
chmod +x /path/to/script.sh
ИЛИ ...
Используйте скрипт 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
. Как сказал Муру, вам следует избегать размещения ссылок в своем посте, но решать, что вы хотите делать, решать вам. Существует много различных способов достижения вашей цели, но не очень много строгих указаний в документации по упаковке.