如何在我的安装脚本中使 chgrp 命令可选?

How can I make a chgrp command optional in my install script?

我正在为 Linux 游戏创建安装脚本。作为安装的一部分,我将游戏可执行文件的 suid 权限更改为 "games" 组,这样即使普通用户 运行 时游戏也可以更新高分文件。

现在我的 Makefile.am 看起来像这样:

AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man

install-exec-hook:
    chgrp games @bindir@/xjump
    chmod +s    @bindir@/xjump

    mkdir -p    @localstatedir@/xjump
    touch       @localstatedir@/xjump/record
    chmod 660   @localstatedir@/xjump/record
    chgrp games @localstatedir@/xjump/record

我遇到的问题是 chgrp 命令需要管理权限。如果我使用 sudo make install 在全球范围内安装游戏,那么它一切正常,但如果我将前缀更改为我的主目录中的某个位置并尝试执行常规 make install 它会由于 chgrp

chgrp: changing group of ‘/home/hugo/Desktop/aaa/bin/xjump’: Operation not permitted

由于游戏的本地安装版本只有一个玩家,所以我真的不需要做chgrp的事情。有没有办法检测 makefile 是否在没有 root 权限的情况下 运行 并跳过权限更改?或者我应该在我的配置脚本中添加一个配置标志,而不是尝试自动修复此权限问题?

当命令失败时,您没有运行 root。似乎没有任何问题,您只是不想要错误消息。 你可以看到你是谁,但最简单的解决方案是重定向输出 以 true 结尾,这样你的步骤就不会失败:

chgrp games @localstatedir@/xjump/record 2>/dev/null || true

如果你 运行 "whoami",你将能够找出当前用户是谁。

    runner=`whoami` ; 
    if test $$runner == "root" ; 
    then 
            chgrp games @localstatedir@/xjump/record
    fi