Терминал не принимает вставленные или напечатанные строки длиной более 1024 символов

Когда я вводю текст на stdin в терминале OS X, одна строка ограничена 1024 символами. Например, cat > /dev/null подает звуковой сигнал после того, как я набираю (или вставляю) строку дольше, чем это, и отказывается принимать больше символов. Проблемным примером является то, когда я хочу подсчитать символы из вложенного текста с cat | wc -c cat | wc -c : cat блокируется на первой длинной линии.

Кажется, это общая проблема при вставке в stdin. Может ли это наблюдаемое ограничение stdin на 1024 символа на строку быть удалено или перенесено на более высокий предел?

Мне нужно это, потому что я хочу вставить текст с длиной более 1024 символов.

Я мог бы также использовать «heredoc» << EOT и вставлять мои длинные строки без каких-либо проблем, но затем текст появляется в моей истории оболочки, чего я не хочу.

One Solution collect form web for “Терминал не принимает вставленные или напечатанные строки длиной более 1024 символов”

Вероятно, это ограничение для внутреннего буфера редактора строки линии терминала.

Вы должны иметь возможность вводить длинные строки, нажав 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 + D для обозначения EOF.

Или:

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

EOF наступит через 3 секунды после того, как вы перестанете печатать. Или:

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

И введите EOF (3 буквы на отдельной строке), чтобы закончить ввод.

Как было предложено Жилем , где это возможно (например, как правило, это не сеанс telnet / ssh), используйте pbpaste вместо вставки. (Это на OSX, в X11 вызовите xsel или xclip .):

 pbpaste | wc -l 

Это также позволит избежать проблем с некоторыми управляющими символами (например, ^C ), которые могут быть найдены в буфере копирования-вставки.

  • Как передать пароль в командную строку mysql
  • linux stdbuf - строка-буферизация опции stdin не существует
  • Каковы некоторые практические применения перенаправления STDIN?
  • Получение stdin из именованного канала
  • Загляните в содержание stdin
  • Как написать скрипт, который может принимать входные данные из stdout
  • Запустить скрипт heredoc через su, прикрепленный к текущему tty
  • Попытка перенаправить <enter> и второй ответ на скрипт linux shell
  • Функция Scripting SSH, получившая ошибку «Ошибка соединения»
  • Как stdin обрабатывается в этом сценарии bash?
  • Может ли оболочка предупредить меня, если программа ждет стандартного ввода?
  • Interesting Posts

    Управление блоком ввода-вывода на основе веса для виртуальных машин

    используя команду scp для передачи файлов, сохраняющих одни и те же имена?

    Можно ли добавить один исполняемый файл, а не весь каталог, в мой $ PATH?

    Застрял в цикле входа (Debian)

    Как использовать ALSA или PulseAudio для переназначения источника стереосигнала на 8-канальный PCM и снизить громкость?

    Удаление символов в определенном столбце перед определенным символом

    Как реализовать отложенное stdout в дочернем процессе без использования временных файлов?

    Как смонтировать съемный носитель в / media / <LABEL> автоматически при вставке без какой-либо среды рабочего стола?

    Пока цикл работает только один раз

    Могу ли я построить дистрибутив linux с libc вместо glibc

    Двойные дисплеи, одно фиксированное, одно вращающееся (CentOS 7)

    Сценарий Bash, использующий чтение, должен прекратить выполнение на Ctrl + D

    Что будет определяться приоритетом в конфликте между ~ / .ssh / config hostname и / etc / hosts?

    После обновления с Fedora 23 до 25 ps2-клавиатура не переучивается

    Почему sed так быстро?

    Linux и Unix - лучшая ОС в мире.