无法从我自己的包中运行脚本

无法从我自己的包中运行脚本

我已经用这个创建了一个简单的包指导,但我无法运行里面的脚本。

有一个名为的文件夹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 myscriptmypack myscript.sh(均返回mypack: command not found

那么我该如何执行它才能使其真正起作用,或者我是否遗漏了一些重要步骤,导致我无法运行该脚本?

答案1

你的脚本没有设置为可执行文件;就像一个脚本不是通过打包安装,您需要确保它已设置可执行位。

您有两个选择:

  1. 创建包时,请确保脚本已设置可执行位通过在工作目录中运行此命令来创建包构建包:

    chmod +x /path/to/script.sh

或者...

  1. 使用postinst你的包的脚本来设置可执行位.postinst安装。向脚本中添加类似如下的命令:

    chmod +x /usr/bin/myscript.sh

对于我的一些东西,我会同时使用这两种方法只是确保它将内容设置为可执行文件。这有时会带来麻烦,但最好确保确保万无一失比不确定好得多。至少在我看来。


至于脚本无法按 执行myscript,那是因为myscriptmyscript.sh不同的物体

.postinst如果您需要这样做,请在您的包脚本中执行以下操作:

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

...然后假设您修复了可执行位问题,那么它应该可以“正常工作”于您尝试的两个版本,即myscript.shmyscript

然而正确的做法是,只将脚本打包为,myscript而不包含 shell 扩展。然后,您应该在开头 ( #!) 包含一个 shebang 行,指示要使用的解释器。因为.sh可以是任何东西。然后,将包设置为只安装myscript。正如 muru 所说,您应该避免在 postinst 中创建链接,但这取决于您想要做什么。有很多不同的实现目标的方法,但包装文档中并没有太多严格的指导。

相关内容