
Ich muss die Dateiberechtigungen der Verzeichnisse /usr
, /tmp
, /var
und deren Inhalt in den Unterverzeichnissen überprüfen. Ich habe die Dateiberechtigungen des Verzeichnisses und seiner Unterverzeichnisdateien in einem Array separat für jedes von /usr
, /tmp
, und übernommen /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
}
Schließlich möchte ich, dass diese separaten Arrays in einem einzigen Array zusammengefasst werden, das eine andere Funktion hat, da wir in Skripten einen dynamischen Umfang haben. Ich habe Folgendes versucht:
fun2(){
set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}
wenn ich das Skript ausführe, erhalte ich diesen Fehler.
script.sh:79919: Index außerhalb des gültigen Bereichs
wenn ich nur ein Array gebe anDauerwelleArray wie unten, ich erhalte keinen Fehler.
set -A perm ${PR_Tperm[@]}
Ich muss so viele Einträge speichernDauerwelleArray. Wie kann ich die Größe des Arrays dynamisch erhöhen?Satz -Ahat nichts mit Bash zu tun, aber diese dynamische Erhöhung könnte für Bash und Ksh gleich sein, deshalb habe ich sie aufgenommen.
Ich habe versucht, es wie unten gezeigt in einer temporären Datei zu speichern:
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
Warum wurde der erste Befehl in Bash erfolgreich ausgeführt, in KSH jedoch nicht?
Antwort1
Bash hat, wenn ich mich richtig erinnere, keine eingebaute Begrenzung der Array-Größe. KornShell93 unterstützt in neueren Versionen Indizes bis zu etwa 64 KB (und in älteren Versionen bis zu 4095).
Es gibt ein Dienstprogramm namens mtree
, mit dem eine Dateihierarchie mit einer Spezifikation verglichen werden kann. Jede Abweichung von der Spezifikation (fehlende Dateien oder Verzeichnisse oder Unstimmigkeiten bei Besitz/Berechtigungen) wird gemeldet und optional (falls möglich) korrigiert.
Da ich nicht weiß, welches Unix Sie verwenden, kann ich Ihnen nicht weiter sagen, wo Sie dieses Dienstprogramm finden. Es befindet sich inDas Basissystem von OpenBSD, ist aber offensichtlich auchverfügbar für Linux.