Provavelmente um limite do buffer do editor de linha interno da disciplina de linha de dispositivo de terminal.
Você deve ser capaz de inserir linhas longas pressionando Ctrl + D no meio dela (para que a parte atualmente inserida seja enviada para cat
e o editor de linha liberado), ou desativando esse editor de linha completamente.
Por exemplo, se estiver usando zsh
:
STTY=-icanon cat > file
Note que você não pode usar Backspace ou qualquer outro recurso de edição. Você também precisa pressionar Ctrl-C para parar cat
.
Com outros shells:
s=$(stty -g); stty -icanon; cat > file
Seguido por:
stty "$s"
Ou apenas:
stty -icanon; cat > file
stty sane
Claro, coisas como
cat | wc -l
ou
wc -l
não funciona. Porque Ctrl + C mata todos os processos no grupo de processos em primeiro plano.
Você poderia fazer:
STTY=-icanon cat | (trap '' INT; wc -l)
Ou como sugerido por @mikeserv :
STTY='eol " "' wc -l
Dessa forma, o buffer será liberado toda vez que você entrar no espaço. Você ainda está no modo canônico, então você ainda pode editar palavras (em oposição a linhas) e usar Ctrl + D para indicar EOF.
Ou:
STTY='-icanon min 0 time 30' wc -l
EOF virá 3 segundos depois de você parar de digitar. Ou:
STTY=-icanon sed -n '/^EOF$/q;p' | wc -l
Digite EOF
(as 3 letras em uma linha) para finalizar a entrada.
Como sugerido por Gilles , onde possível (como em geral não um telnet / ssh sessão por exemplo), use pbpaste
em vez de colar. (Isso é no OSX; no X11, chame xsel
ou xclip
.):
pbpaste | wc -l
Isso também evitará problemas com alguns caracteres de controle (como ^C
) que podem ser encontrados no buffer de copiar e colar.