터미널은 1024자보다 긴 줄을 붙여넣거나 입력하는 것을 허용하지 않습니다.

터미널은 1024자보다 긴 줄을 붙여넣거나 입력하는 것을 허용하지 않습니다.

OS X 터미널의 stdin에 텍스트를 입력할 때 한 줄 제한은 1024자입니다. 예를 들어, cat > /dev/null그보다 긴 줄을 입력(또는 붙여넣기)하면 경고음이 울리고 더 많은 문자를 허용하지 않습니다. 문제가 되는 예는 첫 번째 긴 줄의 블록을 cat | wc -c사용 하여 붙여넣은 텍스트의 문자 수를 계산하려는 경우입니다 .cat

이는 표준 입력에 붙여넣을 때 발생하는 일반적인 문제인 것 같습니다. 한 줄에 1024자라는 표준 입력 제한을 제거하거나 더 높은 제한으로 늘릴 수 있습니까?

줄 길이가 1024자를 초과하는 텍스트를 붙여넣고 싶기 때문에 이것이 필요합니다.

"heredoc"을 사용하여 긴 줄을 문제 없이 붙여넣을 수도 있지만 << EOT그러면 쉘 기록에 원하지 않는 텍스트가 나타납니다.

답변1

터미널 장치의 회선 규칙 내에서 회선 편집기 버퍼의 제한일 수 있습니다.

Ctrl+D중간 부분을 눌러 긴 줄을 입력하거나(현재 입력된 부분이 cat줄 편집기로 전송되어 새로 고쳐지도록) 줄 편집기를 완전히 비활성화할 수 있어야 합니다 .

예를 들어 다음을 사용하는 경우 zsh:

STTY=-icanon cat > file

Backspace기타 편집 기능을 사용할 수 없으니 주의하시기 바랍니다 . 또한 Ctrl-C중지를 눌러야 합니다 cat.

다른 쉘의 경우:

s=$(stty -g); stty -icanon; cat > file

다음은:

stty "$s"

그렇지 않으면:

stty -icanon; cat > file
stty sane

물론 이런 것들은

cat | wc -l

또는

wc -l

불가능한. Ctrl+C포그라운드 프로세스 그룹의 모든 프로세스가 종료되기 때문입니다 .

다음을 수행할 수 있습니다.

STTY=-icanon cat | (trap '' INT; wc -l)

또는@mikeserv가 제안한대로:

STTY='eol " "' wc -l

이렇게 하면 공간에 들어갈 때마다 버퍼가 플러시됩니다. 아직 표준 모드에 있으므로 계속 수정할 수 있습니다.성격(선과 반대) Ctrl+DEOF를 나타내는 데 사용됩니다.

또는:

STTY='-icanon min 0 time 30' wc -l

입력이 중단된 후 3초 후에 EOF가 나타납니다. 또는:

STTY=-icanon sed -n '/^EOF$/q;p' | wc -l

그런 다음 EOF(한 줄에 3글자)를 입력하여 항목을 종료합니다.

~처럼Gilles가 제안한, 가능한 경우(일반적으로아니요예를 들어 telnet/ssh 세션) pbpaste을 붙여넣는 대신 사용하세요. (OSX에서는 X11에서는 xsel또는 xclip.를 호출하세요.):

pbpaste | wc -l

이는 또한 버퍼에 존재할 수 있는 특정 제어 문자를 복사하여 붙여넣을 때 발생하는 문제를 방지합니다 ^C(예:).

관련 정보