Я хочу вставить текст в терминал и сохранить его в файл, не используя редактор, а просто "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