Quantos elementos um array pode armazenar em um script unix?

1

Eu preciso verificar as permissões de arquivo dos diretórios /usr , /tmp , /var e seu conteúdo de subdiretórios. Tomei as permissões de arquivo do diretório e seus arquivos de subdiretório em uma matriz separadamente para cada um dos /usr , /tmp e /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
}

Por fim, quero que essas matrizes separadas estejam em matriz única, que está em uma função diferente, já que temos escopo dinâmico em scripts. Eu tentei como abaixo:

fun2(){
  set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}

quando executo o script, estou recebendo este erro.

script.sh:79919: subscript out of range

quando eu der apenas um array à matriz perm como abaixo, não estou recebendo nenhum erro.

set -A perm ${PR_Tperm[@]}

Eu tenho tantas entradas para armazenar na matriz perm . Como posso aumentar o tamanho do array dinamicamente? set -A não está relacionado ao bash, mas esse aumento dinâmico pode ser o mesmo para o bash e o ksh, então incluí-lo.

Eu tentei armazenar em um arquivo temporário, como mostrado abaixo:

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

Por que o primeiro comando foi executado com sucesso no bash, mas no ksh?

    
por Sriram P 26.04.2017 / 07:58

1 resposta

0

Bash tem, se bem me lembro, não há limite embutido no tamanho da matriz. O KornShell93 suporta índices de até 64k em versões recentes (e até 4095 em versões mais antigas).

Existe um utilitário chamado mtree , que é usado para comparar uma hierarquia de arquivos com uma especificação. Qualquer desvio da especificação (arquivos ou diretórios ausentes ou discrepâncias de propriedade / permissão) é relatado e, opcionalmente, corrigido (se possível).

Como não sei em que você está o Unix, não posso mais indicá-lo para onde encontrar esse utilitário. Está no sistema básico do OpenBSD , mas é evidentemente também disponível para Linux .

    
por 26.04.2017 / 08:27