
/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[@]}
저장할 항목이 너무 많아요파마정렬. 배열의 크기를 동적으로 늘리려면 어떻게 해야 합니까?세트 -Abash와는 관련이 없지만 이러한 동적 증가는 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의 기본 시스템, 그러나 분명히 또한리눅스에서 사용 가능.