Wie füge ich Befehle in ein TTY ein?

20

Ich habe einige ziemlich lange Befehle und Dateipfade, die ich in die Zwischenablage kopiert habe und in einem TTY ausführen muss. Die Dateipfade sind jedoch zu lang, um sie erneut einzugeben, und ich möchte sie einfach nach dem $einfügen (ich kann die Befehle vorher erneut eingeben sie dann), gibt es eine Möglichkeit, dies zu tun?

Also möchte ich einen Befehl ausführen und ihn in der nächsten Zeile beginnen lassen, indem $ich den Text wie folgt in die Zwischenablage kopiere:

$ specialCommandToPasteText
$ pastedText

Ich verwende Ubuntu GNOME 16.04 mit GNOME 3.20.


quelle
3
Fügen Sie die Befehle in ein Bash-Skript in einem Texteditor ein und führen Sie dann das Skript aus dem TTY aus.
Nick Weinberg
@ NickWeinberg: Nicht wirklich eine Option, das ist alles in der CLI und die Programme, die ich dort laufen habe, haben nur die Kopierfähigkeit.
2
Von welchen Programmen kopieren Sie sie?
Nick Weinberg
Verwenden Sie gpm, um Mausunterstützung in der VT bereitzustellen, wie in Ihrer eigenen Antwort auf eine vorherige Frage vorgeschlagen ?
Steeldriver
1
Eine mögliche Lösung wäre, die Kopier- / Einfügefunktion in tmux oder screen zu verwenden
Nick Weinberg,

Antworten:

28

Es ist einfach, aber Sie benötigen ein zusätzliches Tool.

  1. Installieren Sie das Paket xsel, das einen einfachen Befehl zum Zugriff auf die Zwischenablage bietet:

    sudo apt-get install xsel
    
  2. Finden Sie heraus, welchen $DISPLAYDesktop Sie verwenden. Normalerweise sollte es so sein :0, aber Sie können es überprüfen, indem Sie diesen Befehl in einem Terminalemulator auf Ihrem GUI-Desktop ausführen:

    echo $DISPLAY
    

    Ich gehe davon aus, dass die Ausgabe ist :0, ersetzen Sie diese durch Ihre tatsächliche Ausgabe in den folgenden Befehlen, wenn es anders ist.

  3. Kopieren Sie den Befehl, den Sie ausführen möchten, in das TTY, z . B. mit Ctrl+ C.

  4. Wechseln Sie zu dem TTY, den Sie verwenden möchten, z. B. mit Ctrl+ Alt+ zu TTY1 F1.
    Melden Sie sich an, indem Sie Ihren Benutzernamen und Ihr Passwort eingeben.

  5. Geben Sie den vollständigen Befehl ein, den Sie ausführen möchten, ersetzen Sie jedoch den Teil, den Sie aus der Zwischenablage einfügen möchten, durch $(DISPLAY=:0 xsel -ob).

    Wenn Sie beispielsweise eine große Liste zu installierender Pakete kopiert haben, können Sie Folgendes in das TTY eingeben:

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

    Das Snippet für die Zwischenablage muss nicht unbedingt am Ende Ihres Befehls stehen, es kann jedoch an einer beliebigen Stelle angezeigt werden.


Um die Sache noch weiter zu vereinfachen, wollen wir dies noch etwas komplizierter DISPLAY=:0 xsel -obauf ein Skript übertragen. Ich werde es benennen PASTE(weil pastees bereits vergeben ist), aber Sie können es auch anders nennen.

Um die Skriptdatei an einem Ort zu erstellen, an dem jeder Benutzer sie ausführen kann, ohne den vollständigen Pfad angeben zu müssen (ich empfehle /usr/local/bindies), und um sie ausführbar zu machen, führen Sie einfach diese beiden Befehle aus:

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

Jetzt können Sie einfach $(PASTE)in Ihre Befehle einen TTY einbetten , um den Inhalt der Zwischenablage von Ihrem Desktop aus dort einzufügen.

Byte Commander
quelle
2
Vielen Dank! Dies wird mir jetzt bei viel mehr Dingen helfen, als ich ursprünglich gefragt habe! :)
1
Sie könnten sogar DISPLAY=:0 xsel -obirgendwo als Bash-Alias ​​oder kleines Skript speichern (nennen wir es PASTE) und nur eine verkürzte Form verwenden $(PASTE), um den Inhalt der Zwischenablage in Ihren Befehlen zu verwenden.
Byte Commander
Sehr schöner Ansatz
Sergiy Kolodyazhnyy
21

Persönlich verwende ich nur Textdateien:

  1. Öffnen Sie in Ihrer Desktop-Umgebung ein Terminal und

    echo "whatever long text you have copied" > file
    
  2. Gehen Sie zu tty und

    $(cat file)
    
terdon
quelle
2
Das ist gut zu wissen. Ich hätte eigentlich nicht gedacht, dass ein einfacher Befehl wie dieser so gut funktionieren würde. Manchmal denkt der Verstand einfach zu kompliziert. Vielen Dank! =)
Terrance
1
Ich benutze einfach some-command 'Shift + Insert (zum Einfügen). 'Rückkehr. Durch das Einfügen in einfache oder doppelte Anführungszeichen wird verhindert, dass Zeilenumbrüche im eingefügten Text den Befehl ausführen, bevor ich ihn bearbeiten kann, um Probleme zu beheben. IDK, was es Ihnen bringt, den Text in eine Datei zu setzen. Bash verfügt über sehr leistungsstarke Tastenanschläge für die Zeilenbearbeitung, z. B. Strg-Links- oder Strg-Rechtspfeil, um sich wortweise zu bewegen. Alt-Rücktaste, um rückwärts gerichtete Wörter zu löschen. Alt-D, um vorwärts Wörter zu löschen, etc. etc.
Peter Cordes
Oh, ich habe gerade herausgefunden, dass das OP eine Textkonsole VT bedeutet, wenn er TTY sagt. Jemand sollte die Frage wirklich bearbeiten, da jedes Terminal, auf dem Sie eine Shell ausführen können, eine Tty ist, einschließlich Pseudo-Terminals, die von xterm-ähnlichen Programmen gesteuert werden.
Peter Cordes
@PeterCordes ja, aber der Begriff "tty" wird oft, wenn nicht genau, für virtuelle Konsolen verwendet.
Terdon
4

Eine andere mögliche Problemumgehung, die oben nicht aufgeführt ist, umfasst die Verwendung von vim, das Einfügen und das Ausführen :!unix_commandim Befehlsmodus:

  1. Kopieren Sie die Befehle und den Pfad in die Zwischenablage
  2. Öffnen vim, in den Befehlsmodus wechseln Esc, Eingabeaufforderung eingeben:
  3. tippe einen Knall ! und füge dann Ctrl+ Shift+ Vden Befehl ein, den du zuvor in die Eingabeaufforderung kopiert hast und führe ihn aus
Marcellinov
quelle