这个问题与如何在 cfengine3 中使用命令的输出非常相似,但我认为答案不适用于我的情况。
我想通过“git pull”更新git存储库,并根据是否会导致更改触发一些后续操作。
简化,如果通过某个主体有类似“匹配输出和设置类”的if_output_matches东西,我想使用这样的东西:
bundle agent updateRepo {
commands:
"/usr/bin/git pull"
contain => setuidgiddir_sh("$(globals.user)","$(globals.group)","$(target)"),
classes => if_output_matches("Already up-to-date.","no_update");
reports:
no_update::
"nothing updated";
}
body contain setuidgiddir_sh(owner,group,folder) {
exec_owner => "$(owner)";
exec_group => "$(group)";
useshell => "true";
chdir => "$(folder)";
Run Code Online (Sandbox Code Playgroud)
}
那么,是否可以使用一个可能很昂贵的命令的输出并以此为基础做出一些决定?
该execresult功能对我来说不是一个好的选择,因为 a) 拉动有时可能会变得昂贵(不推荐遵循 cfengine3 参考)和 b) 不允许指定用户、组、工作目录 - 这对我来说很重要。存储库位于用户空间中,不属于 root 用户。
cfengine ×1