MacOSX 10.6.7 відрізає stdin на 1024 символів


7

Я написав невеликий сценарій Perl, до якого звертаюся так:

perl -pe'...' <a

Я хотів скопіювати вміст вхідного файлу 'a' з веб-браузера (якщо бути точним записом у блозі WordPress). Копійна частина працює чудово, повний вміст відображається в ClipMenu. Але коли я намагаюся вставити його у файл за допомогою cat та перенаправлення:

cat >a

Він випромінює рівно 1024 символи, а потім перестає приймати дані - лише CTRL-C може допомогти. Я спробував вставити лише 1023 байти / символи, і це працює, після натискання клавіші Enter я міг без проблем ввести його у файл. Але якщо я вписав 1024 символів на одному рядку, нічого іншого, крім CTRL-C, не було.

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

dd bs=1M of=a

До точно такого ж результату. Начебто нічого не допомагає.

Я незрозумілий - чому це відбувається? І як я можу легко скопіювати і вставити у файл на Mac OS X, і таким чином, щоб я міг бути впевненим, що вміст нічим не змінюється?


Ця остання частина - це зовсім окреме питання, правда?
Даніель Бек

Добре помічений, Даніель. Це якесь пояснення тієї роботи, яку я хочу зробити, так чи інакше, це ставить питання в перспективу.
Агостон Хорват

2
Окремі запитання повинні розглядатися на окремих, ну, питаннях на цьому сайті. Єдина тема "У мене є такі проблеми:" Тема не допомагає нікому, окрім оригінального плаката (надано, ваше друге питання є нешкідливим порівняно) - ви, мабуть, повинні зосередитись на своїй проблемі з 1024 символами в цій темі. Мені цікаво, чому ви хочете вставити саме те, що містить джерело? У царині тексту у вас може бути кілька несумісних наборів символів в одному файлі.
Даніель Бек

@Daniel: Я намагався виправити посилання у HTML-версії запису в блозі Wordpress, які були скасовані помилковим візуальним редактором wordpress. Wordpress, firefox, iTerm та macos консолі підтримують unicode, тому діаграми не є проблемою. Для цього найбільш спрощеним підходом (без використання мозгу) було вибрати повний запис у блозі, скопіювати його у файл, виконати сценарій perl, а потім скопіювати його назад. І тоді я потрапив на цю дивну проблему, на яку я витратив годину, намагаючись пояснити і гугл, без жодних результатів.
Агостон Хорват

Відповіді:


4

% pbpaste | perl -e '...'

Ви досягаєте максимальної довжини рядка для tty. Якщо ви вимкнете tty з лінійного режиму, він буде працювати.

Але pbpaste - це дійсно те, що ви хочете.


1
Мене цікавить цей "вимикач із режиму лінії" - як це можна зробити? Чи можете ви дати кілька покажчиків?
Агостон Хорват

Перевірте сторінку чоловіка на "stty", щоб дізнатися більше. Це не для слабкого серця, і в основному зламає все, що ви очікуєте про свій термінал. Але це можна зробити тимчасово, і кінцевий результат буде ... ідентичним використанню pbpaste, як я описав вище.
ZILjr

2

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

:set paste

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

:w a
:q

Щоб зберегти файл і вийти.


1024 здається трохи низьким, як межа. Будь-який спосіб її збільшити?
Даніель Бек

Я ніколи не стикався з будь-яким подібним лімітом з Linux. Знову ж таки, я думаю, що Debian / Ubuntu має віддалений відлуння увімкнено ще з довгого часу. Макос, здається, відстає (як завжди).
Агостон Хорват
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.