1

有一个我不时通过 doxygen 运行的源存储库,它在我的 public_html 目录中生成 html。发现自己必须像这样更改 umask 并破解 bash 中的主要组,这很有效:

echo "umask $UMASK; doxygen include_config.conf" | newgrp $GROUP

但它看起来很笨重,我不禁想知道是否有一些配置设置或选项开关让 doxygen 直接在它生成的所有文件/目录上设置 UID/组和权限?它经常用于在网站上生成 HTML,以至于几乎每个人都需要例如具有世界可读的输出。搜索了网页,配置文件和手册页无济于事。

更新:希望找到一些内置功能,但看起来没有。经过一些迭代后,这个包装器似乎可以完成这项工作:

#!/bin/bash
OUTPUT_PATH=/path/to/output
CONFIG_PATH=/path/to/include_config.conf
GROUP=somegroup
PERM=750
UMASK=027 

if [[ ! -e $OUTPUT_PATH ]]; then mkdir $OUTPUT_PATH; fi
chmod $PERM $OUTPUT_PATH
chmod g+s $OUTPUT_PATH
chgrp $GROUP $OUTPUT_PATH
umask $UMASK
doxygen $CONFIG_PATH

它比原始脚本更健壮、便携且不那么笨重,同时仍然可以一次通过并且没有竞争条件。

4

1 回答 1

1

据我所知,没有办法告诉 Doxygen 设置生成文件的所有权详细信息。考虑到 Doxygen 在没有任何 Linux 风格文件系统权限概念的系统上运行,如果这种东西被内置到应用程序中,我会感到惊讶。不过,编写一个构建文档并自动调整权限的简单脚​​本应该是微不足道的:

#!/bin/bash

doxygen include_config.conf
chgrp -R $GROUP $PATH_TO_OUTPUT_FOLDER
chmod -R $UMASK $PATH_TO_OUTPUT_FOLDER

更新: 回应您的评论(我承认这有点离题):我建议不要使用newgrp这样做。这是一个过时的命令,可以追溯到旧的 UNIX 时代,那时您一次只能在一个组中。在现代系统上使用它时可能会遇到一些奇怪的问题。如果您在调用之前添加以下内容,则doxygen在目录中创建的任何内容都将继承父文件夹的组(这基本上是您想要的):

mkdir $PATH_TO_OUTPUT_FOLDER
chgrp $GROUP $PATH_TO_OUTPUT_FOLDER
chmod g+s $PATH_TO_OUTPUT_FOLDER

chgrp不再需要运行后的 Doxygen。作为奖励,它不会改变您当前登录会话或正在运行的进程的组 ID,也不会派生子 shell(newgrp通常会执行这两者之一)。

于 2012-04-20T20:35:12.310 回答