我已经用这个创建了一个简单的包指导,但我无法运行里面的脚本。
有一个名为的文件夹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
)
那么我该如何执行它才能使其真正起作用,或者我是否遗漏了一些重要步骤,导致我无法运行该脚本?
答案1
你的脚本没有设置为可执行文件;就像一个脚本不是通过打包安装,您需要确保它已设置可执行位。
您有两个选择:
创建包时,请确保脚本已设置可执行位前通过在工作目录中运行此命令来创建包前构建包:
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
而不包含 shell 扩展。然后,您应该在开头 ( #!
) 包含一个 shebang 行,指示要使用的解释器。因为.sh
可以是任何东西。然后,将包设置为只安装myscript
。正如 muru 所说,您应该避免在 postinst 中创建链接,但这取决于您想要做什么。有很多不同的实现目标的方法,但包装文档中并没有太多严格的指导。