如何在 Debian postinst 脚本中获取新安装的版本?

2024-01-16

Per the Debian 政策手册 http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html,我的 postinst 脚本在升级和配置时被调用,如“postinst 配置旧版“, 在哪里旧版是以前安装的版本(可能为空)。我想确定新版本,即当前正在配置(升级到)的版本。

环境变量$DPKG_MAINTSCRIPT_PACKAGE包含包名称;似乎没有等效的_VERSION场地。/var/lib/dpkg/status在 postinst 运行后更新,所以我似乎也无法从那里解析它。

有任何想法吗?


这是我发现解决此问题的最佳方法是在您的.postinst(或其他控制文件):

case "$1" in
    configure)
        new_version="__NEW_VERSION__"
        # Do something interesting interesting with $new_version...
        ;;
    abort-upgrade|abort-remove|abort-deconfigure)
        # Do nothing
        ;;
    *)
        echo "Unrecognized postinst argument '$1'"
        ;;
esac

Then in debian/rules,在构建时将占位符变量替换为正确的版本号:

# Must not depend on anything. This is to be called by
# binary-arch/binary-indep in another 'make' thread.
binary-common:
    dh_testdir
    dh_testroot
    dh_lintian
    < ... snip ... >

    # Replace __NEW_VERSION__ with the actual new version in any control files
    for pkg in $$(dh_listpackages -i); do \
        sed -i -e 's/__NEW_VERSION__/$(shell $(SHELL) debian/gen_deb_version)/' debian/$$pkg/DEBIAN/*; \
    done

    # Note dh_builddeb *must* come after the above code
    dh_builddeb

所结果的.postinst片段,发现于debian/<package-name>/DEBIAN/postinst,看起来像:

case "$1" in
    configure)
        new_version="1.2.3"
        # Do something interesting interesting with $new_version...
        ;;
    abort-upgrade|abort-remove|abort-deconfigure)
        # Do nothing
        ;;
    *)
        echo "Unrecognized postinst argument '$1'"
        ;;
esac
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Debian postinst 脚本中获取新安装的版本? 的相关文章

  • Emacs-Lisp:如何将emacs-lisp程序打包为PC应用程序?

    只是想知道是否可以将 emacs 和 Lisp 程序打包和部署为 PC 应用程序 这样一旦下载并运行 setup exe 某种程度 用户就可以启动应用程序以使 emacs 运行特定的 Lisp 程序 就像应用程序已实现一样通过其他语言和平台
  • 如何在bash中仅提取两个字符串之间多行的第一个实例?

    我的文件是 abc 123 xyz abc 675 xyz 我想提取 abc 123 xyz 123 可以是任何东西 重点是我想要第一次出现 我尝试使用这个 sed n abc xyz p filename 但这给了我所有的例子 我怎样才能
  • 如何仅将整个嵌套目录中的头文件复制到另一个目录,在复制到新文件夹后保持相同的层次结构

    我有一个目录 其中有很多头文件 h 和其他 o 和 c 文件以及其他文件 这个目录里面有很多嵌套的目录 我只想将头文件复制到一个单独的目录 并在新目录中保留相同的结构 cp rf oldDirectory newDirectory将复制所有
  • 使用 Jenkins 运行 ios-sim

    我正在尝试使用以下命令从命令行启动我的应用程序ios sim https github com downloads pegli ios sim ios sim xcode4 3 tar gz但这就是我得到的 Started by user
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 列出破折号中当前定义的函数?

    我想列出当前定义的函数dash 有什么办法可以做到这一点吗 我能想到的最接近的是type它可以用来测试一个函数是否存在 但除此之外我很困惑 附 我说的是dash在这里 不是bash or zsh 看看 exec c 似乎没有 没有 表是静态
  • 如何在 Xcode 4.2 中创建 Shell 脚本目标?

    我想知道是否有人知道 XCode 4 1 如何创建 shell 脚本 该选项不存在 但在最新版本中可能会被称为其他名称 塔 在导航器中选择您的项目 单击 添加目标 为空目标选择 聚合 添加构建阶段 gt 添加运行脚本 单击构建阶段并编辑运行
  • 已安装全局 NPM 包但未找到命令

    我已经全局安装了两个 npm 包 下载 https www npmjs com package download and 谜虚拟盒 https www npmjs com package enigmavirtualbox通过命令行 npm
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 为什么我不能将 sed 的输出重定向到文件

    我正在尝试运行以下命令 someprogram tee dev tty sed s 2 gt output file 但当我去查看时 该文件始终是空白的 如果我删除 gt output file从命令末尾 我可以看到 sed 的输出 没有任
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da

随机推荐

  • 使用 swift 进行部分卷页动画

    我正在寻找一种方法来指示 uiview 上的 pagecurl 动画 以向用户提示他可以滚动某些页面 它应该是某种部分卷页 问题是我不知道该怎么做 我找到了一些教程 但仅适用于 Objective C 我不知道如何将其转移到 swift 中
  • NestJS:如何在自定义验证器中访问 Body 和 Param?

    我有一个场景 我需要来自两个值的值param and body执行自定义验证 例如 我有一条路线 photoId tag为照片添加标签 然而 在向照片添加标签之前 它必须验证是否已经存在与照片同名的标签 我的控制器中有以下路线 Post p
  • 了解执行 Google 数据存储区查询时出现的“CancellationException:任务已取消”错误

    我正在使用 Google App Engine v 1 9 48 在一些数据存储查询期间 我随机收到 CancellationException 任务已取消 错误 而且我不太确定到底是什么导致了这个错误 从other https stack
  • Dapper 和 SQL 注入

    Dapper 如何帮助防止 SQL 注入 我正在测试不同的 DAL 技术 必须选择一种来确保我们网站的安全 我倾向于 Dapper http code google com p dapper dot net 但需要一些帮助来了解安全性 Da
  • 替换 javascript 中的 JSON 键

    假设我有一个 JSON 对象 例如 var myjson com mycompany top Element com mycompany top count 10 com mycompany top size 0 我想用冒号替换键中的点 句
  • F3 更改 css 文件的相对 URi

    我是一个尝试 F3 的新手 我的示例应用程序基本上可以工作 但是对 css 文件的引用发生了更改并导致找不到 它看起来像 htaccess 问题 但我似乎无法修复它 我的 css 文件指定为 我的 htaccess 文件看起来像 Rewri
  • 为什么 UITextView 在调整大小后会在错误的框架中绘制文本?

    我陷入了某种魔力 当我尝试更改 UITextView 框架 在本例中使用 UISlider 时 文本会在比框架更小的其他区域中绘制 多次调整大小 有趣的是 如果我们在尝试使框架变大时滑动得足够快 文本就会绘制在非常正确的区域中 有人可以解释
  • 动态大小类型总是在堆上吗?

    我对 Rust 的学习让我了解了动态大小类型 DST 并且我知道这些类型的大小在编译时无法得知 例如 str 我现在的问题是 我说 DST 永远不能存在于堆栈上 它们只存在于堆上 这样说对吗 另外 另一方面 说大小类型可以存在于堆栈中是否正
  • GridView 排序仅有效一次

    我有一个网格 它仅按升序排序一次 然后什么也没有发生 aspx文件代码
  • 如何在 Swift 4 中创建一定大小的数组?

    如何制作一个包含 1000 个浮点数的简单数组 我已经尝试过这个 var computeArray Array
  • 如何从node.js缓冲区获取int

    是代码 var time new Buffer 506BF1E3 hex time toString Pk 0x506BF1E3 1349251555 UNIX时间 如何获取 1349251555 表格time缓冲 这个也能达到目的 通过使
  • SQL Server:过滤 sp_who2 的输出

    在SQL Server下 有没有一种简单的方法来过滤sp who2的输出 例如 假设我只想显示某个数据库的行 你可以尝试类似的东西 DECLARE Table TABLE SPID INT Status VARCHAR MAX LOGIN
  • 如何检查使用哪个编译器来构建Python

    有没有办法知道使用哪个编译器来构建Python安装在特定的linux机器上 我尝试使用ldd on the Python动态库 1 但我无法理解它是否是用gcc或英特尔编译器 1 ldd libpython2 7 so 1 0 linux
  • Clang 在 c++98 模式下使用 std::stoi 编译代码

    我需要用 C 98 编译我的 cpp 而不是我的学校项目的 C 11 所以我用了 std c 98编译 CPPFLAGS Wall Werror Wextra std c 98 但我犯了一个错误并使用了C 11std stoi功能 i st
  • 如何让浮动div居中?

    我想将下面模型中出现的三个 div 居中 全部都有 float left 这可能吗 我不介意有包装器div Text align center 和 display inline block 不适用于我的代码 如果你想让它们居中 你就不能浮动
  • 发布时母版页出现“无法加载类型”错误

    本地查找一切正常 但是当我将 ASP NET 应用程序发布到远程服务器时 出现以下错误 Server Error in Application Parser Error Description An error occurred durin
  • 页面加载时的 JSF 重定向

    简短的问题 是否可以进行重定向 例如当用户未登录时 当呈现页面时 为此你should http java sun com products servlet Filters html use a Filter http java sun co
  • 如何用颜色突出显示浏览器选项卡

    我有一个聊天 Web 应用程序 我需要一项功能 其中如果特定用户在浏览器窗口中打开了多个选项卡 并且聊天选项卡不是活动选项卡 那么如果他从另一端收到 ping 则聊天选项卡应该自动突出显示以吸引用户注意力 我打算用 jQuery 来做这件事
  • 高调的 MonoTouch 应用程序? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想要一些使用 MonoTouch 创建的高调应用程序的示例 您打电话回家的应用程序 进入所属类别前 25 名的应用程序 我在哪里可以找到此类应用程序
  • 如何在 Debian postinst 脚本中获取新安装的版本?

    Per the Debian 政策手册 http www debian org doc debian policy ch maintainerscripts html 我的 postinst 脚本在升级和配置时被调用 如 postinst