запобігти багаторядкові пасти в баш


10

Я часто використовую ctrl+cдля копіювання тексту з якоїсь програми gui, а потім вставляю його в свій емулятор терміналу (термінатор), використовуючи меню клацання правою клавішею миші та вставку. Іноді я забуваю, що буфер обміну містить кілька рядків, які при вставці в bash викликають "виконання" кожного рядка

Чи є якесь рішення, щоб повністю запобігти багаторядковій пасті?


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

1
в bash запустіть команду, sleep 999999потім виконайте пасту, якщо це виглядає нормально. команда сну не читає рядки, і вони відкидаються при натисканні ctrl+c.
Скаперен



1
@Otheus, printf '\e[?2004h'у більшості xterm-подібних емуляторів терміналів вмикається режим із вставкою, що містить дужки, де термінал дужкою вставляє текст, щоб програми могли визначати, де починається і де закінчується вставка. xterm також підтримує інший режим, у \e[?2005hякому всі вставлені символи мають префікс ^V(розуміється багатьма програмами та дисципліною Tty line як litteral-next).
Стефан Шазелас

Відповіді:


5

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

За коментарі до вихідного повідомлення, вам потрібно (1) емулятор терміналу , який підтримує в квадратні дужки вставити і (2) , відповідна підтримка незалежно працює в терміналі, тобто vim, bash, zsh. Термінальні емулятори, що підтримують поставлену дужку пасту (список повинен бути оновлений на основі коментарів до цієї публікації):

  • xterm - з ??
  • gnome-terminal - з ??
  • putty - з 0,63 (дата випуску 2013-08-06)

Програми, що підтримують режим в дужках:

  • vim
  • zsh

Бо bashStéphaneChazelas склав сценарій оболонки, щоб полегшити виявлення цього режиму та вжити відповідних заходів.

Більш конкретна відповідь - запобігання відрізання ліній - невідповідна, не знаючи про програму Unix, яка працює при натисканні пасти.

Менеджер буфера обміну , може бути , що вам потрібно.


Сценарій там не виявляє скопленої скоби, це сценарій perl, який емулює 3-ю форму бракерованої пасти, яка не потребує підтримки в додатку, окрім як програма повинна розуміти ^ V як litteral-next (цей сценарій би насправді відповідь на це питання, хоча, ймовірно, потребуватиме вдосконалення, це був лише ПЗ).
Стефан Шазелас

@ StéphaneChazelas не соромтеся редагувати / покращувати свою публікацію. :) "Додаток повинен розуміти ^Vяк literal-next. Але як ^Vпотрапляє у вхідний потік програми?
Отей,

Він отримує його, якщо внутрішній пристрій tty не перебуває в режимі icanon (наприклад bash, підказка readline побачить це (і трактувати це як буквальний наступний)). Якщо в режимі icanon, лінія дисципліни цього внутрішнього пристрою tty позбавить його (доки lnextсимвол ^V), як і коли ви вручну вводите Ctrl-V X ..
Stéphane Chazelas

1
Якщо цей сценарій не використовується, нічого не вставляється, ^Vякщо ви не використовуєте quoted pasteрежим xterm (увімкнено відправленням \e[?2005h). Цей perlскрипт можна адаптувати так, що він видаляє всі, крім першого рядка, у багаторядковій вставці (хоча і не надійно для великих паст), але як це вже є, оскільки він цитує новий рядок для рядка читання (як би ви натиснули Ctrl- V Ctrl-J), це перешкоджає виконанню рядків (вони просто додаються до буфера редагування, і для їх виконання потрібно натиснути Enter).
Стефан Шазелас

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