3

Я хочу вставить текст в терминал и сохранить его в файл, не используя редактор, а просто "cat".
Но слишком длинные строки или табуляции в тексте делают это невозможным с помощью простой команды, такой как «cat> test.txt» или «cat << 'EOF'> test.txt» ("здесь документ").

В bash в режиме "здесь документ", если вставленные текстовые данные содержат вкладки, они вызывают автозаполнение.
Если я начинаю bash с «--noediting», в некоторых системах длина вставляемой строки ограничена 256 символами, остальная часть вставленного текста отбрасывается.
Если вместо этого я вставлю непосредственно в кошачий ввод (без << 'EOF'), максимальная строка также 256.

Если я сделаю:

stty raw; cat >test.txt; stty sane

длина строки больше не ограничена, но нет способа отправить EOF на вход cat.
Если я включу eof char:

stty raw icanon eof '^d'; cat >test.txt; stty sane

длинные строки потеряны.

Кроме того, если я не отключить эхо с:

stty -echo

Сочетание Solaris 10 и Putty приводит к потере больших блоков текста ~ 1500 символов, что иногда приводит к пустому файлу.

Самое близкое к тому, что я хочу, это убить кота с тайм-аутом:

( sleep 15; pkill cat ) & stty raw -echo; cat >test.txt; stty sane; echo done

или использовать bash --noediting с raw:

bash --noediting
stty raw -echo icrnl
cat <<'EOF' >test.txt; stty sane

1 ответ1

1

Если вы используете bash, вы можете отключить завершение табуляции перед вставкой, а затем снова включить его с помощью команды bind :

bind '\C-i:self-insert'
# paste away
bind '\C-i:complete'

Это громоздко, но это работает.

При вводе вручную в командной строке bash вы можете открыть буквенную вкладку, сначала нажав CTRL-V, а затем вкладку. Очевидно, что вы не можете сделать это при вставке, и меня это раздражало настолько, что я исправил свою любимую терминальную программу iTerm2 командой "Специальная вставка", которая отправляет буквенные вкладки через последовательность вкладок CTRL-V.

Я только сегодня вечером написал и отправил этот патч, так что если вы хотите версию iTerm2, которая делает это, вам придется скомпилировать свою собственную версию из моего форка на GitHub с использованием Xcode. Надеюсь, он будет объединен с основным приложением, если я это сделаю, я обновлю этот ответ. РЕДАКТИРОВАТЬ: изменения, которые я сделал, теперь в основной ветке iTerm2. Используйте команду Edit -> Paste with Literal Tabs.

Если вы используете другую ОС или терминальную программу, извините, я не могу помочь с этим.

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