Терминал не принимает вставленные или напечатанные строки длиной более 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 ), которые могут быть найдены в буфере копирования-вставки.

  • перенаправление stdin для скрипта, запрашивающего ввод
  • Unix без / dev / stdin, / dev / stdout и / dev / stderr?
  • Определите, когда скрипт python ожидает ввода вручную
  • Как обмануть приложение, ожидающее файл: // читать из stdin?
  • Сценарий, использующий fifos, не генерирующий выход при обработке из stdin
  • Могу ли я читать и писать в тот же файл в Linux, не перезаписывая его?
  • Возьмите образец из файла или потока?
  • автоматически записывать ответы на программу, которая уже читает со стандарта в
  • Команды трубопровода, изменить запись stdin в stdout
  • gzip тот же вход различный выход
  • Можно ли управлять xterm (или, в частности, процессом, который начал xterm) из другого процесса?
  • Interesting Posts

    Как сохранить настройки Vim tabstop в файле?

    Что значит иметь знак минуса в качестве первого символа команды в выводе htop?

    Можно ли использовать команду записи bluetoothctl для отправки последовательных данных?

    Как я могу понять, почему устройство HID unikey не распознается программным обеспечением, требующим его?

    Установка драйверов принтера Canon Pixma mg2400 на Manjaro / Arch?

    Gnome3.6.2 – чаты эмпатии не появляются в панели уведомлений через некоторое время в fedora 18

    Мастер отказался от запроса сеанса: отказано в разрешении

    Пытается обновить php на CentOS 5.7

    Каков 6-й символ хэша паролей в Linux, и почему он часто является косой чертой?

    Apache 2 и PHP 5 не работают

    отображать сообщение дня во временном интервале, скажем, каждый час

    Текстовые манипуляции: извлеките все внутри скобок

    Проверка скрипта скрипта Vim

    Почему я не могу установить командира полуночи на Debian?

    Inode Timestamp Plus / Минус Интерпретация

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