所有关键字也可以在括号中带有可选参数。参数包括所有者、组和模式。此参数用于引用的文件或目录。要更改配置文件的所有者、组和模式,请使用:
参数是可选的。如果只需要更改组和模式,请使用:
这是因为选项 plist 助手用于注释掉该行,因此它们需要放在最前面。有关更多信息,请参见 OPTIONS_SUB 。
@desktop-file-utils
安装和卸载后将运行 update-desktop-database -q 。永远不要直接使用,将 USES=desktop-file-utils 添加到 Makefile 中。
为传递为参数的目录添加一个 @dir 条目,并在安装和卸载后在该目录上运行 fc-cache -fs 。
为传递为参数的目录添加一个 @dir 条目,并在安装和卸载后在该目录上运行 mkfontscale 和 mkfontdir 。此外,在卸载时,如果字体.scale 和字体.dir 缓存文件为空,则会删除它们。
将作为参数传递的文件添加到 plist 中,并在安装和卸载时更新信息文档索引。此外,如果索引为空,则在卸载时删除索引。永远不应手动使用此功能,而应始终通过 INFO 进行操作。有关更多信息,请参阅信息文件。
在安装和卸载时运行 kldxref 目录。另外,在卸载时,如果目录为空,则会将其删除。
在卸载时将删除文件,并且如果文件不存在不会报错。
用于处理设置文件的安装,通过包中捆绑的示例文件。实际的非示例文件要么是第二个文件名(如果存在),要么是没有 .sample 扩展名的第一个文件名。
这个做三件事。首先,将作为参数传递的第一个文件,即示例文件,添加到 plist 中。然后,在安装时,如果未找到实际文件,则将示例文件复制到实际文件中。最后,在卸载时,如果实际文件没有被修改,则移除实际文件。查看更多信息,请参阅配置文件。
在安装和卸载时在目录上运行 update-mime-database
将作为参数传递的文件添加到 plist 中。
在安装时,将文件的完整路径添加到 /etc/shells,同时确保不会重复添加。在卸载时,从 /etc/shells 中移除。
@terminfo
不要单独使用。如果 port 安装 *.terminfo 文件,将其添加到其 Makefile 中。
在安装和卸载时,如果 tic 存在,从${PREFIX}/shared/misc/terminfo.db 中的*.terminfo 文件刷新。
有一些硬编码的关键字,在 pkg-create(8)中有详细文档。为了完整起见,它们也在这里有文档记录。
当文件的所有者、组或权限需要更改时,请使用空关键字作为占位符。 例如,要将文件的组设置为 games 并添加 setgid 位,请添加:
在软件包安装或卸载过程中执行命令。
@preexec 命令
在预安装脚本的一部分执行命令。
@postexec 命令
将命令作为安装后脚本的一部分执行。
@preunexec 命令
作为预卸载脚本的一部分执行命令。
@postunexec 命令
作为后卸载脚本的一部分执行命令。
如果命令包含这些序列中的任何一个,它们将在命令中内联展开。对于这些示例,假设 @cwd 设置为 /usr/local,最后提取的文件是 bin/emacs。
%F
展开为最后提取的文件名(如指定的那样)。在示例中是 bin/emacs。
%D
展开为当前目录前缀,如使用 @cwd 设置。在示例中是 /usr/local。
%B
扩展为完全限定文件名的基本名称,即当前目录前缀加上最后的文件规范,减去尾部文件名。在这个例子中,那将是 /usr/local/bin。
%f
扩展为完全限定名称的文件名部分,或 %B 的相反。在这个例子中,emacs。
将所有随后提取的文件的默认权限设置为模式。格式与 chmod(1) 使用的格式相同。无参数使用可将权限设置为默认权限(在打包时文件的模式)。
将所有后续文件的默认所有权设置为用户。不带参数使用可将其设置回默认所有权( root )。
将所有后续文件的默认组所有权设置为组。不带参数使用可将默认组所有权设置回默认值( wheel )。
打包时忽略此行。
声明目录名称。默认情况下,软件包安装在 PREFIX 下创建的目录会自动删除。当需要创建 PREFIX 下的空目录,或者目录需要具有非默认所有者、组或模式时,请使用此选项。需要注册 PREFIX 外的目录。例如,/var/db/${PORTNAME} 需要有一个 @dir 条目,而 ${PREFIX}/shared/${PORTNAME} 不需要,如果它包含文件或使用默认所有者、组和模式。
在安装或卸载过程中执行命令。请改用 @preexec * 命令, @postexec 命令, @preunexec 命令, @postunexec 命令*。
声明要在卸载时删除的目录名称。默认情况下,包安装时在 PREFIX 下创建的目录在卸载包时会被删除。
声明要删除的目录名称,如 @dirrm ,但如果无法删除目录,则不发出警告。
包列表文件可以通过在 ${PORTSDIR}/Keywords 目录中定义的关键字进行扩展。 每个关键字的设置存储在一个名为 keyword.ucl 的 UCL 文件中。 该文件必须至少包含以下部分之一:
attributes
action
pre-install
post-install
pre-deinstall
post-deinstall
pre-upgrade
post-upgrade
attributes
更改关键字使用的所有者、组或模式。 包含一个关联数组,其中可能的键是 owner , group 和 mode 。 值分别为用户名、组名和文件模式。 例如:
action
定义关键字参数的处理方式。 包含一个数组,其中可能的值为:
setprefix
设置下一个 plist 条目的前缀。
dir
注册一个目录,在安装时创建并在卸载时删除。
dirrm
注册一个目录,在卸载时删除。已弃用。
dirrmtry
注册一个目录以尝试并在卸载时删除。已弃用。
file
注册一个文件。
setmode
设置下一个属性列表条目的模式。
setowner
设置下一个 plist 条目的所有者。
setgroup
设置下一个 plist 条目的组。
comment
不做任何事情,相当于不输入 action 部分。
ignore_next
忽略 plist 中的下一个条目。
arguments
如果设置为 true ,则添加参数处理,将整行分割为编号参数 %@ , %1 , %2 等。例如,对于此行:
%1 和 %2 将包含:
它还影响 action 条目的工作方式。当有多个参数时,必须指定参数编号。例如:
pre-install
, post-install
, pre-deinstall
, post-deinstall
, pre-upgrade
, post-upgrade
这些关键字包含要在安装、卸载或升级软件包之前或之后执行的 sh(1)脚本。除了通常在 @preexec 命令, @postexec 命令, @preunexec 命令, @postunexec 命令中描述的 @exec %foo 占位符之外,还有一个新的占位符 %@ ,代表关键字的参数。
示例 2. @dirrmtryecho 关键字的示例
此关键字有两个作用,它向装箱清单添加一行 @dirrmtry directory ,并在卸载软件包时回显目录已被删除的事实。
示例 3. 真实案例, @sample 如何被实现
这个关键字有三个作用。它将作为参数传递的第一个文件名添加到 @sample 的打包列表中,将复制示例到实际配置文件的 post-install 脚本指令添加到打包列表中,如果实际配置文件不存在,则添加 post-deinstall 指令以移除配置文件,如果配置文件尚未被修改。