MacOSX 10.6.7 corta stdin a 1024 caracteres

7

Eu escrevi um pequeno script em perl que invoco da seguinte forma:

perl -pe'...' <a

Eu queria copiar o conteúdo do arquivo de entrada 'a' de um navegador da web (uma entrada de blog completa do wordpress, para ser exato). A parte da cópia funciona perfeitamente, o conteúdo completo aparece no ClipMenu. Mas quando tento colar em um arquivo usando cat e redirecionar:

cat >a

Emite exatamente 1024 caracteres, depois pára de aceitar entrada - somente o CTRL-C pode ajudar. Eu tentei colar apenas 1023 bytes / chars, e isso funciona, depois de pressionar enter, eu poderia inseri-lo no arquivo sem problemas. Mas, se eu inserisse 1024 caracteres em uma única linha, não havia como fazer outra coisa além de CTRL-C.

Eu tentei iTerm e Terminal.app, ambos mostram exatamente o mesmo comportamento. Eu tentei bash de macports e / bin, com exatamente os mesmos resultados. Eu até tentei dd:

dd bs=1M of=a

Para o mesmo resultado exato. Nada parece ajudar.

Eu estou sem noção - por que isso acontece? E como eu poderia copiar e colar em um arquivo no Mac OS X facilmente, e de uma forma que eu possa ter certeza de que o conteúdo não é alterado de alguma forma?

    
por Agoston Horvath 30.03.2011 / 12:31

2 respostas

4

% pasta de papel | perl -e '...'

Você está atingindo o comprimento máximo da linha para o tty. Se você mudar o modo tty fora da linha, funcionará.

Mas o pbpaste é realmente o que você quer.

    
por 03.04.2011 / 00:59
2

Cada unix que eu já usei tem um limite no comprimento da entrada do modo cozido, embora provavelmente seja diferente do OS para OS. É por isso que você só pode digitar muito em uma linha quando faz um gato > a. Os buffers do SO são inseridos a partir do TTY para que você possa fazer a edição (por exemplo, retroceder sobre o texto e alterá-lo) antes de enviá-lo para o aplicativo (cat, nesse caso). O sistema operacional aloca um buffer de tamanho fixo para isso e você está chegando ao limite. Sua melhor opção é usar um programa interativo para gravar o arquivo. Por exemplo, você poderia executar o vi e digitar o

:set paste

comando para desativar o recuo automático. Pressione "i" para entrar no modo de inserção, cole seu código, pressione "escape" e execute:

:w a
:q

Para salvar o arquivo e sair.

    
por 30.03.2011 / 22:11