Як котити << Довільні текстові дані з буфера обміну << EOF


3

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

У режимі "тут документ" тут, якщо вставлені текстові дані містять вкладки, вони призводять до автоматичного заповнення.
Якщо я почну bash з "--edititing", у деяких системах довжина вставленої лінії обмежена 256 символами, решта вставленого тексту відкидається.
Якщо замість цього я вставити безпосередньо на введення кота (без << 'EOF'), максимальна лінія також становить 256.

Якщо я:

stty raw; cat >test.txt; stty sane

, довжина рядка більше не обмежена, але немає можливості надіслати EOF на коти.
Якщо я вмикаю 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 з сирим:

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

3
Чи можете ви, будь ласка, сказати своє питання чіткіше і що ви збираєтеся робити?
Sepahrad Salour

1
Будь ласка, не зволікайте. Якщо ви не розумієте питання, це означає, що ви не фахівець. Ваш негативний голос відштовхує людей, які могли відповісти.
басейн

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

1
Я досі не впевнений, що ти намагаєшся зробити. Я б припустив, що ви намагаєтесь вставити з буфера обміну X у файл, не відкриваючи редактора. Також я не впевнений, чи шукаєте ви сценарій чи інтерактивне рішення. Такі незрозумілі речі, мабуть, є причиною ваших протистоянь. Погуглити, що, на мою думку, це ваше питання, привело мене до цього питання . Можливо xclip -o > test.txt, ця хитрість робить для вас.
Тім

@Tim Я підключаюсь до Solaris з Putty з сеансу Windows на сервері Citrix XenApp, до якого я підключаюсь з Windows 7 із клієнтом XenApp. Я не можу копіювати файли, у мене є тільки буфер обміну.
басейн

Відповіді:


1

Якщо ви використовуєте bash, ви можете відключити заповнення вкладки перед вставкою, а потім повторно ввімкнути її за допомогою bindкоманди:

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

Це непросто, але це працює.

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

Я лише сьогодні вночі написав і подав цей патч, тому, якщо ви хочете, щоб версія iTerm2, яка це робить, вам доведеться скласти свою власну з моєї вилки на GitHub за допомогою Xcode. Будемо сподіватися, що він об'єднається в основний додаток, якщо він буде, я оновлю цю відповідь. EDIT: Зміни, які я вніс, зараз перебувають у головній галузі iTerm2. Скористайтеся командою Правка -> Вставити з буквальними вкладками.

Якщо ви використовуєте іншу ОС або термінальну програму, вибачте, я не можу в цьому допомогти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.