2017-08-14 96 views
1

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

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

+0

这应被标记与操作系统或发行为其相关的包装形式和工具链正在使用中。 (如pkg-file标签所示,多个操作系统使用该扩展名)。 –

+0

@CharlesDuffy done –

回答

1

,因为这是由installer命令运行时,COMMAND_LINE_INSTALL环境变量设置为1。正常打开pkg时,该变量根本没有设置。

所以:

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

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

值将得到更新:

  • HOME
  • LOGNAME
  • MAIL将被置

值:

  • SUDO_COMMAND - 已通过须藤
  • SUDO_GID运行命令 - 跑须藤
  • SUDO_USER用户的UID - - 跑须藤
  • SUDO_UID用户的GID的用户的用户名的是跑sudo

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

参考:sudo 1.8.20 manual - ENVIRONMENT section

+0

这是真实的*如果操作系统提供的工具在运行前后脚本之前不会清理环境。这肯定不总是正确的 - 例如,RPM试图防止软件包的前置和后置脚本的行为被本地环境修改。 –

相关问题