当我的 pkg 运行它的 Post 安装脚本时,我怎么知道这是怎么发生的?

When my pkg runs its Post-installation script, how can I know how that happened?

此脚本有两种方式 运行:当用户打开 pkg 文件并完成正常的 GUI 设置时,或者当管理员(或精明的用户)运行s sudo installer -pkg /path/to/Installer.pkg -target /。对于第二个,我想知道脚本何时在此模式下 运行 以便我可以做出更便于管理的决定,例如不打开另一个 GUI。 我如何知道我的 pkg 何时通过命令行安装?

我希望有一些环境变量或类似的东西。

运行 通过 sudo 的脚本将更改某些变量的值并添加其他变量。您的脚本可以检查这些变量(或其值)是否存在,以确定安装程序是否是 运行 通过 sudo。

将更新的值:

  • HOME
  • LOGNAME
  • MAIL

要设置的值:

  • SUDO_COMMAND -- 通过 sudo
  • 运行 的命令
  • SUDO_GID -- 运行 sudo
  • 用户的 GID
  • SUDO_UID -- 运行 sudo
  • 用户的 UID
  • SUDO_USER -- 运行 sudo
  • 用户的用户名

我的建议是检查 SUDO_COMMAND 环境变量是否存在;它不太可能为非 sudo 安装设置,但会为基于 sudo 的安装设置。

参考:sudo 1.8.20 manual - ENVIRONMENT section

由于 installer 命令已将其 运行,因此 COMMAND_LINE_INSTALL 环境变量设置为 1。正常打开pkg时,根本没有设置这个变量。

所以:

if [ $COMMAND_LINE_INSTALL ]; then 
    # Do stuff for CLI land
else
    # Do stuff for GUI land
fi