TonysMac
  • macOS软件安装包 [从入门到精通]
  • 前言:你是我的菜
    • 有话要说
    • 你是我的读者
    • 此书门槛高吗
    • 各章内容提要
    • 本书的约定
    • 版权
    • 联系作者和反馈
  • 第一章:整装待发
    • 基本概念
    • 参考书籍
    • 工具软件
    • 硬件考虑
    • 操作系统
  • 第二章:初试身手
    • 安装器
      • 安装器的其它功能
      • 安装的工作
    • 安装包形式
    • 安装包的组成
      • 小结
    • 查看安装包内容
      • Pacifist介绍
      • Suspicious Package介绍
      • 两个软件的比较
      • 查询安装包的命令
      • 安装包解包
      • 重新打包
    • macOS组织安装包
      • 已安装列表
      • 包标识符
      • 安装包文件
      • 查找安装包
      • 安装包信息
      • 安装包组
    • 本章总结
  • 第三章:重装出发
    • 命令行制作安装包
      • 真实场景
      • 测试App
      • 工作目录结构
      • 确保文件权限
      • 制作安装包
      • 小练习
      • 所有权选项
      • make脚本
      • 运行make脚本
      • 小结
    • Packages生成安装包
      • 1.建立项目
      • 2. 配置属性
      • 3.生成
      • 4.排错
      • 小结/练习
    • Iceberg生成安装包
      • 1.建立项目
      • 2.项目配置
      • 3.安装包设置
      • 4.文件
      • 5.设置权限
      • 6.生成
      • 7.小结和思考
    • 重新打包
    • 快照重新打包
      • 为快照搭建环境
      • Composer软件
      • 快照实例1:alfred
      • 快照实例2:smartmontools
    • 安装包更新
    • 本章总结
  • 第四章:暗度陈仓
    • 卸载简介
      • 卸载脚本
      • make脚本
      • 排错和完善
      • 小结
    • 使用Packages应用
      • 1.建立项目
      • 2.配置和生成
      • 3.小结
    • 详解安装包脚本
      • 脚本类型
      • 脚本参数
      • 脚本返回值
      • 用户环境
      • 注意事项
    • dockutil举例
      • 安装包脚本
      • make脚本
      • installer命令行
      • 查看日志
      • 小结
    • 总结
  • 第五章:扬帆起航
  • 第六章:庖丁解牛
Powered by GitBook
On this page

Was this helpful?

  1. 第四章:暗度陈仓
  2. 卸载简介

排错和完善

如果以前曾经安装过或者Utilities中有Onyx.app,那么第一次运行rmOnyx.pkg可以成功,之后再运行它就会报错。

问题出在哪里?熟悉脚本的读者会猜到,就是我们的安装包脚本处理不当造成的。在前面的postinstall脚本中运行最后一行rm命令。如果/Applications/Utilities/Onyx.app 不存在,rm命令会报错,并返回非零值以示出错,如果在脚本中的后续命令中不做处理,postinstall脚本会返回最后运行命令的返回值,这造成postinstall脚本返回值也是非零,而脚本返回错误值(非零)会导致安装程序报错。所以,要注意:安装包脚本一定要处理好脚本的返回值,尽量考虑周全并多做判断,避免返回不必要的错误代码。

下面我们来对postinstall做如下的改进:

#!/bin/bash
pkgutil --pkgs=lts.ApplePai.Onyx && pkgutil --forget lts.ApplePai.Onyx;
rm -r /Applications/Utilities/Onyx.app
exit 0

上面的改进是:

第2行:前半部分的“pkgutil --pkgs=lts.ApplePai.rmOnyx”,是使用 pkgutil 命令读取当前系统的安装包数据库的记录,如果存在“lts.ApplePai.rmOnyx”就会返回成功值0,否则会返回错误值。 “&&”的意思是:如果前面的命令返回0,就继续执行后面的命令。后面的命令“pkgutil --forget lts.ApplePai.rmOnyx”,让系统从数据库中删除该包标识符。读者需注意,pkgutil命令只管理系统包数据库,它不会清理所安装的文件,文件清理是操作人员的工作。

第4行:我们强制脚本退出值为0(成功)。因为无论该app是否存在,该包的标识符是否存在,我们的目的都是删除它们并认为移除工作成功完成,所以返回值应该是成功(=0)。

其实使用rm -fr 也可以避免rm命令返回错误值。作为普通的脚本一定要注意每个命令的返回值,在脚本最后最好使用exit 0返回0。

还有一种常见的错误就是,脚本文件没有被设置可执行或者脚本文件名不是 "postinstall"。

Previousmake脚本Next小结

Last updated 6 years ago

Was this helpful?