
我需要檢查目錄/usr
、/tmp
及其/var
子目錄的內容的檔案權限。我已經為每個/usr
、/tmp
和分別獲取了數組中的目錄及其子目錄文件的文件權限/var
:
fun() {
set -A PR_Uperm -- "/usr" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
set -A PR_Tperm -- "/tmp" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
fun2
}
最後,我希望這些單獨的陣列位於不同函數中的單一陣列中,因為我們在腳本中具有動態作用域。我嘗試過如下:
fun2(){
set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}
當我執行腳本時,我收到此錯誤。
script.sh:79919: 下標超出範圍
當我只給一個陣列時燙髮數組如下,我沒有收到錯誤。
set -A perm ${PR_Tperm[@]}
我有很多條目要存儲燙髮大批。如何動態增加陣列的大小?組-A與 bash 無關,但這種動態增加對於 bash 和 ksh 可能是相同的,所以我將其包含在內。
我嘗試存儲在臨時文件中,如下所示:
printf "/usr\n`ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`\n" >> /tmp/output2.txt # not working in ksh, but working when I run as bash
ksh: no space
ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}' >> /tmp/output2.txt # it is working
為什麼第一個命令在 bash 中成功運行,但在 ksh 中運行成功?
答案1
如果我沒記錯的話,Bash 對數組大小沒有內建限制。 KornShell93 在最近的版本中支援最多約 64k 的索引(在舊版本中支援最多 4095)。
有一個名為的實用程序mtree
,用於將文件層次結構與規範進行比較。任何與規範的偏差(遺失檔案或目錄,或所有權/權限差異)都會被報告並選擇性地修正(如果可能)。
由於我不知道您使用的是什麼 Unix,因此我無法進一步指示您在哪裡可以找到該實用程式。在裡面OpenBSD的基礎系統,但顯然也是適用於 Linux。