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. 命令行制作安装包

make脚本

在实际工作中,难免不反复进行修改和补充等。那么,每当更新都要逐行重复执行若干命令就显得不方便也不易保证质量,所以下面我们将上面的操作集成到一个简单的脚本中(注:后面章节我们会添加更多内容对其扩展,形成更加使用的脚本模本),本书统一把这种脚本为“make脚本”。

#!/bin/bash
pkgName="CopyApp"
projectHome="$HOME/Desktop/myPKGs/Chapter4/$pkgName"

if [ "$EUID" -ne 0 ]; then echo "Please run as root"; exit; fi
if [ -d "$projectHome" ]; then
	cd "$projectHome"
	#/usr/sbin/chown -R root:wheel root/Applications/Utilities/CopyApp.app
	#/bin/chmod -R 755  root/Applications/Utilities/CopyApp.app
	/usr/bin/pkgbuild --root root --identifier "lts.ApplePai.$pkgName" --ownership recommended --quiet "$pkgName.pkg"
	Exit 0
else
	echo "Error: Cannot find project folder ($projectHome)."
	exit -1
fi

对于不太熟悉Bash脚本的读者,可以参考下面对脚本的逐行解释。限于篇幅我们只能粗略讲解,对于每个命令的含义、说明和详细用法,请读者自己参考在线bash文档和本书前言中介绍的网络教程:

  • 第1行:#!/bin/bash 声明它使用/bin/bash作为脚本解释器解释脚本内后面的命令并逐行运行。

  • 第2和3行:声明了两个变量:pkgName 和 projectHome,分别用于保存项目名称和项目目录全路径。 注意,变量定义的等号前后都没有空格。

  • 第5行:是if判断语句,判断脚本是否运行在root用户权限,如果不是root就使用echo命令在标准输出显示 "Please run as root" 并退出。所以,运行命令时使用“sudo”。 举例中的 “EUID” 是 bash 的内部变量,它记录当前用户的帐户id,root 用户的 id 总是0。 判断 root 用户还可以用 “id -u” 命令,如果返回值=0就是root用户。所以这一行也可以替换为(注 $( ) 的意思是 运行 ()中的命令): if [ $(id -u) != 0 ]; then echo "Please run as root"; exit; fi

  • 第6行:判断项目目录"$projectHome" 是否存在,如果不存在就跳转13行,否则继续。 注意,使用目录一定要将其包含在括号中,因为如果目录中包含空格,那么空格前后两个部分会被解释为两个不同的参数。

  • 第7行:将当前工作目录切换到项目目录,因为后面的操作都是基于当前目录的。同样是要用双引号将目录路径括起来。

  • 第8行:“#” 开头的行是注释行。命令chown变更后面目标文件的所述用户和群组,这里我们将其注释以备后用。 如果不熟悉UNIX 的文件用户权、群组和权限属性,请参考其它资料。

  • 第9行:也标记为注释。这行的作用是使用chmod命令修改权限,以保证app 应用有正确的权限。

  • 第10行:pkgutil 命令前面已经介绍了。相比较前面的介绍,这里添加了一个 --quiet 的参数,让 pkgbuild 命令以静默的方式运行不输出每一步的结果。

  • 第11行:exit命令退出当前脚本,并返回值0给调用它的进程。说明我们的运行成功结束。 注意,严谨的编程习惯应该是判断上面pkgbuild命令的返回值,并作出相应的操作。我们这里忽略这些判断。

  • 第13行:显示错误信息 "Error: Cannot find project folder ($projectHome)." 其中括号中将显示项目目录的路径。

  • 第14行: 以返回值-1退出脚本

Previous所有权选项Next运行make脚本

Last updated 6 years ago

Was this helpful?