2012-04-20 59 views
1

有一個我通過doxygen運行的源代碼庫,它會在我的public_html目錄中生成html。發現自己不得不改變的umask和黑客的主要組在bash這樣的,它的工作原理:doxygen可以爲它創建的文件設置自定義權限嗎?

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 

這是多一點堅固,便攜,比原來的劇本不太笨重,同時還在一個通和不分種族的條件下工作。

回答

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通常會做這兩個中的一個)。

+0

好吧猜猜我運氣不好,然後堅持我的umask/newgrp腳本。我不會使用chgrp和chmod,因爲那樣它會在所有文件上傳遞三次而不是一次,而且在我的情況下它會有一個競爭條件,因爲我實際上設置了更多限制性的權限。 – smocking 2012-04-20 23:45:15

+0

沒有聽說過目錄上的'setgid'行爲;這是一個很好的功能。仍然需要umask,但這種方式不那麼笨拙。 – smocking 2012-04-21 11:01:44

相關問題