O que controla os limites da expansão da cinta de shell?

7

Neste exemplo eu me refiro à expansão de uma sequência de números inteiros, mas talvez (?) os limites sejam relevantes para todos os aspectos da expansão de chaves. Essa visão mais geral também é de interesse para mim.

seq parece manipular sequências inteiras muito mais longas do que {1..n} suporta a expansão (pelo menos, esse é o caso neste exemplo).

eg 'seq -f @% 12.0f 1 1000000000 > / dev / null' .. Isso expande 1 bilhão de forma feliz em 14m 04s

No entanto, echo {1..10000000000} >/dev/null cai no esquecimento da CLI em 'gnome-terminal' e 'konsole' (... adeus sessão de terminal!)

O melhor que eu consegui sair da expansão de chaves para uma sequência inteira, é aproximadamente {1..15000000} .. apenas 15 milhões.

Esta é uma limitação da própria expansão da chave, ou de como echo manipula os dados expandidos? Parece ser causado pelo uso de toda a RAM disponível, mas achei que usaria a área swap nesse ponto ...

Além disso, (btw), esta seqüência inteira de 15000000, echo {..} leva 57.0s; Considerando que seq leva apenas 12.7s ...

    
por Peter.O 28.02.2011 / 07:10

2 respostas

7

echo {1..5} é expandido no comando echo 1 2 3 4 5 , que é então expandido da maneira usual. Não é de todo semelhante a seq 1 1000000000 >/dev/null , que nunca se expande para um comando com muitos argumentos.

É mais parecido com echo $(seq 1 1000000000) : acho que isso acontece da mesma maneira?

O problema que você está enfrentando é lidar com grandes comandos, sobre os quais o Unix sempre foi exigente, o que equivale a dizer que é um problema geral ao manipular cadeias de comandos. É uma das coisas que Perl foi escrito para corrigir.

Eu colocaria um relatório de bugs educado e informativo de qualquer maneira: isso poderia provocar uma discussão interessante.

    
por 28.02.2011 / 10:53
1

Eu acho que essa expansão não foi projetada para ser usada dessa maneira. O acidente indica um bug, certamente, mas raramente desencadeou um.

Como você acha que é prático alimentar bilhões de inteiros consecutivos em alguma coisa?

    
por 28.02.2011 / 07:53