7

Я написал небольшой Perl-скрипт, который я вызываю следующим образом:

perl -pe'...' <a

Я хотел скопировать содержимое входного файла «а» из веб-браузера (точнее, целой записи в WordPress). Часть копирования работает отлично, все содержимое отображается в ClipMenu. Но когда я пытаюсь вставить его в файл с помощью cat и перенаправить:

cat >a

Он излучает ровно 1024 символа, затем перестает принимать ввод - может помочь только CTRL-C. Я попытался вставить только 1023 байта / символа, и это работает, после нажатия Enter, я мог без проблем ввести его в файл. Но если бы я ввел 1024 символа в одной строке, не было никакого способа сделать что-либо еще, кроме CTRL-C.

Я пробовал iTerm и Terminal.app, оба показывают одинаковое поведение. Я пробовал bash из macports и /bin, с такими же результатами. Я даже попробовал дд:

dd bs=1M of=a

Точно такой же результат. Кажется, ничто не поможет.

Я не знаю, почему это происходит? И как я могу легко скопировать и вставить в файл в Mac OS X, и я могу быть уверен, что содержимое не будет изменено каким-либо образом?

2 ответа2

4

% pbpaste | perl -e '...'

Вы набираете максимальную длину строки для tty. Если вы переключите tty из режима линии, он будет работать.

Но pbpaste действительно то, что вы хотите.

2

Каждый Unix, который я когда-либо использовал, имеет ограничение на длину ввода в режиме готовки, хотя, вероятно, он отличается от ОС к ОС. Вот почему вы можете печатать так много в одной строке, когда вы делаете cat> a. Операционная система буферизует ввод из TTY, так что вы можете выполнить редактирование (например, возврат на текст и изменить его) перед отправкой в приложение (в данном случае cat). ОС выделяет для этого буфер фиксированного размера, и вы работаете в пределе. Ваш лучший вариант - использовать интерактивную программу для записи файла. Например, вы можете запустить vi и ввести

:set paste

Команда отключить авто-отступ. Нажмите "i", чтобы войти в режим вставки, вставить свой код, нажать escape и запустить:

:w a
:q

Чтобы сохранить файл и выйти.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .