Как вставить команды в TTY?

20

У меня есть довольно длинные команды и пути к файлам, которые я скопировал в буфер обмена и должен выполнить в TTY, однако пути к файлам слишком длинные для перепечатки, и я хотел бы просто вставить их после $(я могу перепечатать команды раньше их тогда), есть ли способ сделать это?

Поэтому я хотел бы выполнить команду и $поместить ее в следующую строку, начиная с текста, скопированного в буфер обмена, примерно так:

$ specialCommandToPasteText
$ pastedText

Я использую Ubuntu GNOME 16.04 с GNOME 3.20.


источник
3
Вставьте команды в скрипт Bash в текстовом редакторе, затем выполните скрипт из TTY?
Ник Вайнберг
@NickWeinberg: Не совсем вариант, это все в CLI, и программы, которые я там запускаю, имеют только возможность копирования.
2
Из какой программы вы их копируете?
Ник Вайнберг
Используете ли вы gpmдля поддержки мыши в VT, как это предлагается в вашем собственном ответе на предыдущий вопрос ?
Steeldriver
1
Одним из возможных решений было бы использование функции копирования / вставки в tmux или screen
Ник Вайнберг,

Ответы:

28

Все просто, но вам нужен дополнительный инструмент.

  1. Установите пакет, xselкоторый предоставляет простую команду для доступа к буферу обмена:

    sudo apt-get install xsel
    
  2. Узнайте, какой $DISPLAYрабочий стол используется. Обычно так и должно быть :0, но вы можете проверить это, выполнив эту команду в эмуляторе терминала на рабочем столе GUI:

    echo $DISPLAY
    

    Я предполагаю, что вывод будет :0заменен на фактический вывод в следующих командах, если он отличается.

  3. Скопируйте команду, которую вы хотите выполнить в TTY, например, используя Ctrl+ C.

  4. Переключитесь на TTY, который вы хотите использовать, например, на TTY1, используя Ctrl+ Alt+ F1.
    Войдите, введя ваше имя пользователя и пароль.

  5. Введите полную команду, которую хотите запустить, но замените часть, которую хотите вставить из буфера обмена $(DISPLAY=:0 xsel -ob).

    Например, если вы скопировали большой список пакетов для установки, вы можете ввести его в TTY:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    Фрагмент буфера обмена не обязательно должен быть в конце вашей команды, хотя он может появиться где угодно.


Чтобы еще больше упростить ситуацию, давайте перенесем это все еще немного DISPLAY=:0 xsel -obв сценарий. Я назову это PASTE(потому что pasteуже занято), но вы также можете назвать это по-другому.

Чтобы создать файл сценария в месте, где каждый пользователь может запустить его без указания полного пути (я рекомендую /usr/local/binдля этого), и сделать его исполняемым, просто запустите эти две команды:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

Теперь вы можете просто встроить $(PASTE)свои команды в TTY, чтобы вставить туда содержимое буфера обмена с вашего рабочего стола.

Byte Commander
источник
2
Благодарность! Это поможет мне гораздо больше вещей, чем то, о чем я изначально просил! :)
1
Вы даже можете хранить DISPLAY=:0 xsel -obкак псевдоним Bash или небольшой скрипт где угодно (назовем его PASTE) и использовать только сокращенную форму, например, $(PASTE)использовать содержимое буфера обмена в ваших командах.
Byte Commander
Очень хороший подход
Сергей Колодяжный
21

Лично я просто использую текстовые файлы:

  1. В среде рабочего стола откройте терминал и

    echo "whatever long text you have copied" > file
    
  2. Бросьте к Tty и

    $(cat file)
    
terdon
источник
2
Это хорошо знать. Я на самом деле не думал, что такая простая команда будет работать так хорошо. Иногда разум просто думает слишком сложно. Спасибо! =)
Терранс
1
Я просто использую some-command 'shift + insert (для вставки). 'возвращение. Вставка внутри одинарных или двойных кавычек препятствует выполнению команды символами новой строки в вставленном тексте, прежде чем я смогу отредактировать ее, чтобы исправить любые проблемы. ИДК, что вы получаете, чтобы поместить текст в файл. Bash имеет очень мощные клавиши для редактирования строк, такие как ctrl-left или ctrl-right arrow для перемещения по словам. alt-backspace для удаления обратных слов. Alt-d, чтобы удалить слова вперед и т. Д. И т. Д.
Питер Кордес
О, я только что понял, что OP означает текстовую консольную VT, когда он говорит TTY. Кто-то должен действительно отредактировать вопрос, потому что каждый терминал, на котором вы можете запустить оболочку, является tty, включая псевдо-терминалы, управляемые программами, подобными xterm.
Питер Кордес
@PeterCordes да, но термин "tty" часто, если неточно, используется для обозначения виртуальных консолей.
Тердон
4

Другой возможный обходной путь, не указанный выше, включает использование vim, вставку и запуск :!unix_commandв командном режиме:

  1. скопируйте команды и путь к буферу обмена
  2. открыть vim, перейти в командный режим Esc, ввести подсказку:
  3. введите удар, ! а затем вставьте Ctrl+ Shift+ Vкоманду, которую вы ранее скопировали в командной строке, и выполните
Marcellinov
источник