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)
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
(예:).