Як вставити команди в TTY?


20

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

Тож я хотів би виконати команду і мати її в наступному рядку, починаючи з того, щоб $покласти текст, скопійований у буфер обміну так:

$ specialCommandToPasteText
$ pastedText

Я запускаю Ubuntu GNOME 16.04 з GNOME 3.20.


3
Вставте команди в сценарій Bash в текстовому редакторі, а потім виконайте скрипт з TTY?
Нік Вайнберг

@NickWeinberg: Насправді це не варіант, це все в CLI, а програми, які я там запускаю, мають лише можливість копіювання.

2
З якої програми ви їх копіюєте?
Нік Вайнберг

Чи використовуєте ви gpmпідтримку миші в ЗП, як це запропоновано у вашій власній відповіді на попереднє запитання ?
steeldriver

1
Одним з можливих рішень було б використання функції копіювання / вставки в tmux або на екрані
Нік Вайнберг,

Відповіді:


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, щоб вставити вміст буфера обміну зі свого робочого столу.


2
Спасибі! Це допоможе мені набагато більше речей, ніж те, про що я спочатку просив! :)

1
Ви навіть можете зберігати DISPLAY=:0 xsel -obпсевдонім Bash або невеликий скрипт у будь-якому місці (давайте назвемо його PASTE) і використовувати лише скорочену форму, як, наприклад, $(PASTE)використання вмісту буфера обміну в своїх командах.
Командир байт

Дуже приємний підхід
Сергій Колодяжний

21

Особисто я просто використовую текстові файли:

  1. У робочому середовищі відкрийте термінал і

    echo "whatever long text you have copied" > file
    
  2. Опустіть до тти і

    $(cat file)
    

2
Це добре знати. Я насправді не думав, що така проста команда, як ця, буде так добре працювати. Іноді розум просто здається занадто складним. Дякую! =)
Терранс

1
Я просто використовую some-command 'shift + insert (для вставки). 'повернення. Вставка всередині одинарних або подвійних лапок запобігає виконанню команди в новому рядку в вставленому тексті, перш ніж я зможу редагувати його, щоб усунути будь-які проблеми. IDK, що ви отримуєте від того, щоб помістити текст у файл. Bash має дуже потужні натискання клавіш для редагування рядків, як, наприклад, стрілка ліворуч або клавіша ctrl праворуч, щоб рухатись словами. alt-backspace для видалення зворотних слів. Alt-d для видалення прямих слів тощо тощо
Пітер Кордес

О, я щойно зрозумів, що ОП означає текстову консоль VT, коли він говорить TTY. Хтось дійсно повинен відредагувати питання, тому що кожен термінал, на якому можна запустити оболонку, - це tty, включаючи псевдотермінали, керовані xterm-подібними програмами.
Пітер Кордес

@PeterCordes Так, але термін "tty" часто, якщо неправильно, використовується для позначення віртуальних консолей.
тердон

4

Інший можливий спосіб вирішення, не перелічений вище, передбачає використання vim, вставлення та запуск :!unix_commandу командному режимі:

  1. скопіюйте команди та шлях до буфера обміну
  2. відкрити vim, перейти в режим команд Esc, ввести рядок:
  3. введіть чубку, ! а потім вставте Ctrl+ Shift+ Vкоманду, яку ви скопіювали раніше у запиті та виконайте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.