Jak wkleić polecenia do TTY?

20

Mam kilka dość długich poleceń i ścieżek plików, które skopiowałem do schowka i muszę wykonać w TTY, jednak ścieżki plików są zbyt długie, aby je ponownie wpisać i chciałbym je wkleić po $(mogę ponownie wpisać polecenia wcześniej im wtedy), czy jest na to sposób?

Chciałbym więc wykonać polecenie i $umieścić je w następnym wierszu, zaczynając od umieszczenia tekstu skopiowanego do schowka w następujący sposób:

$ specialCommandToPasteText
$ pastedText

Używam Ubuntu GNOME 16.04 z GNOME 3.20.


źródło
3
Wkleić polecenia do skryptu Bash w edytorze tekstu, a następnie wykonać skrypt z TTY?
Nick Weinberg,
@NickWeinberg: Naprawdę nie jest to opcja, wszystko to jest w interfejsie CLI, a programy, które tam działam, mają tylko możliwość kopiowania.
2
Z którego programu kopiujesz je?
Nick Weinberg,
Czy używasz, gpmaby zapewnić obsługę myszy w VT, jak zasugerowano we własnej odpowiedzi na poprzednie pytanie ?
steeldriver
1
Jednym z możliwych rozwiązań byłoby użycie funkcji kopiuj / wklej w tmuxie lub ekranie
Nick Weinberg

Odpowiedzi:

28

To proste, ale potrzebujesz dodatkowego narzędzia.

  1. Zainstaluj pakiet, xselktóry zapewnia łatwe polecenie dostępu do schowka:

    sudo apt-get install xsel
    
  2. Dowiedz się, którego $DISPLAYużywa Twój pulpit. Zwykle tak powinno być :0, ale można to sprawdzić, uruchamiając to polecenie w emulatorze terminali na pulpicie GUI:

    echo $DISPLAY
    

    Zakładam, że dane wyjściowe są :0, zamień je na rzeczywiste dane wyjściowe w poniższych poleceniach, jeśli są inne.

  3. Skopiuj polecenie, które chcesz wykonać w TTY, np. Używając Ctrl+ C.

  4. Przełącz na TTY, którego chcesz użyć, np. Na TTY1 za pomocą Ctrl+ Alt+ F1.
    Zaloguj się, wpisując nazwę użytkownika i hasło.

  5. Wpisz pełne polecenie, które chcesz uruchomić, ale zamień część, którą chcesz wstawić ze schowka $(DISPLAY=:0 xsel -ob).

    Na przykład, jeśli skopiowałeś dużą listę pakietów do zainstalowania, możesz wpisać to w TTY:

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

    Fragment schowka niekoniecznie musi znajdować się na końcu polecenia, może pojawić się w dowolnym miejscu.


Aby jeszcze bardziej uprościć, przenieśmy to nieco skomplikowane DISPLAY=:0 xsel -obdo skryptu. Nazwie to PASTE(bo pastejest już zajęte), ale możesz też nazwać to inaczej.

Aby utworzyć plik skryptu w miejscu, w którym każdy użytkownik może go uruchomić bez konieczności podawania pełnej ścieżki (zalecam /usr/local/bindo tego) i aby był wykonywalny, po prostu uruchom te dwie komendy:

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

Teraz możesz po prostu osadzić $(PASTE)w swoich poleceniach na TTY, aby wstawić tam zawartość schowka z pulpitu.

Bajt Dowódca
źródło
2
Dzięki! Pomoże mi to teraz o wiele więcej rzeczy, niż pierwotnie pytałem! :)
1
Możesz nawet przechowywać DISPLAY=:0 xsel -objako alias Bash lub mały skrypt w dowolnym miejscu (nazwijmy go PASTE) i używać tylko skróconej formy, takiej jak $(PASTE)użycie zawartości schowka w swoich poleceniach.
Bajt Dowódca
Bardzo fajne podejście
Sergiy Kolodyazhnyy
21

Osobiście używam tylko plików tekstowych:

  1. W środowisku pulpitu otwórz terminal i

    echo "whatever long text you have copied" > file
    
  2. Zrzuć na tty i

    $(cat file)
    
terdon
źródło
2
To dobrze wiedzieć. Właściwie nie sądziłem, że takie proste polecenie, takie jak to, zadziała tak dobrze. Czasami umysł wydaje się zbyt skomplikowany. Dziękuję Ci! =)
Terrance
1
Po prostu używam some-command 'shift + insert (aby wkleić). 'powrót. Wklejenie pojedynczych lub podwójnych cudzysłowów zapobiega uruchamianiu polecenia przez nowe wiersze w wklejonym tekście, zanim będę mógł go edytować w celu rozwiązania problemów. IDK co zyskuje, aby umieścić tekst w pliku. Bash ma bardzo potężne klawisze edycji linii, takie jak ctrl-lewa lub ctrl-prawa strzałka, aby poruszać się po słowach. Alt-Backspace, aby usunąć słowa z tyłu. Alt-d, aby usunąć naprzód wyrazy itp.
Peter Cordes,
Och, właśnie zorientowałem się, że OP oznacza VT konsoli tekstowej, kiedy mówi TTY. Ktoś powinien naprawdę edytować pytanie, ponieważ każdy terminal, na którym można uruchomić powłokę, jest tty, w tym pseudo-terminale kontrolowane przez programy podobne do xterm.
Peter Cordes,
@PeterCordes tak, ale termin „tty” jest często, jeśli niedokładnie, używany w odniesieniu do wirtualnych konsol.
terdon
4

Innym możliwym obejściem niewymienionym powyżej jest użycie vim, wklejenie i uruchomienie :!unix_commandw trybie poleceń:

  1. skopiuj polecenia i ścieżkę do schowka
  2. otwórz vim, przejdź do trybu poleceń Esc, wprowadź monit:
  3. wpisz huk, ! a następnie wklej Ctrl+ Shift+ Vpolecenie, które wcześniej skopiowałeś w wierszu polecenia i wykonaj
Marcellinow
źródło