我正在为Linux游戏创建安装脚本。作为安装的一部分,我将游戏可执行文件的suid权限更改为“游戏”组,以便游戏即使在常规用户运行时也可以更新高分文件。
现在我的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权限的情况下运行并跳过权限更改?或者我应该在配置脚本中添加配置标志,而不是尝试自动修复此权限问题?
答案 0 :(得分:1)
当命令失败时,您没有以root用户身份运行。似乎什么都不会出错,你只是不想要错误信息。 您可以看到自己是谁,但最简单的解决方案是重定向输出 用true结束,所以你的步骤不会失败:
chgrp games @localstatedir@/xjump/record 2>/dev/null || true
答案 1 :(得分:1)
如果您运行" whoami",您将能够找出当前用户是谁。
runner=`whoami` ;
if test $$runner == "root" ;
then
chgrp games @localstatedir@/xjump/record
fi