Comment coller des commandes dans un TTY?

20

J'ai des commandes et des chemins de fichiers assez longs que j'ai copiés dans le presse-papiers et que je dois exécuter dans un ATS, mais les chemins de fichiers sont trop longs pour être retapés et je voudrais simplement les coller après le $(je peux retaper les commandes avant alors), existe-t-il un moyen de le faire?

Je voudrais donc exécuter une commande et l'avoir sur la ligne suivante en commençant par $mettre le texte copié dans le presse-papiers comme suit:

$ specialCommandToPasteText
$ pastedText

J'utilise Ubuntu GNOME 16.04 avec GNOME 3.20.


la source
3
Collez les commandes dans un script Bash dans un éditeur de texte, puis exécutez le script à partir du TTY?
Nick Weinberg
@NickWeinberg: Pas vraiment une option, tout est dans la CLI et les programmes que j'exécute là-bas n'ont que la capacité de copie.
2
De quel (s) programme (s) les copiez-vous?
Nick Weinberg
Utilisez-vous gpmpour fournir un support de souris dans le VT, comme suggéré dans votre propre réponse à une question précédente ?
steeldriver
1
Une solution possible serait d'utiliser la fonctionnalité copier / coller dans tmux ou screen
Nick Weinberg

Réponses:

28

C'est simple, mais vous avez besoin d'un outil supplémentaire.

  1. Installez le package xselqui fournit une commande simple pour accéder au presse-papiers:

    sudo apt-get install xsel
    
  2. Découvrez quel $DISPLAYordinateur de bureau utilise. Habituellement, cela devrait être le cas :0, mais vous pouvez le vérifier en exécutant cette commande dans un émulateur de terminal sur votre bureau GUI:

    echo $DISPLAY
    

    Je suppose que la sortie est :0, remplacez-la par votre sortie réelle dans les commandes suivantes si elle est différente.

  3. Copiez la commande que vous souhaitez exécuter dans le TTY, par exemple en utilisant Ctrl+ C.

  4. Passez au TTY que vous souhaitez utiliser, par exemple au TTY1 à l'aide de Ctrl+ Alt+ F1.
    Connectez-vous en tapant votre nom d'utilisateur et votre mot de passe.

  5. Entrez la commande complète que vous souhaitez exécuter, mais remplacez la pièce que vous souhaitez insérer à partir du presse-papiers $(DISPLAY=:0 xsel -ob).

    Par exemple, si vous avez copié une grande liste de packages à installer, vous pouvez taper ceci dans le TTY:

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

    L'extrait de presse-papiers ne doit pas nécessairement être à la fin de votre commande, il peut apparaître n'importe où.


Pour simplifier encore les choses, déplaçons cela encore un peu compliqué DISPLAY=:0 xsel -obdans un script. Je vais le nommer PASTE(parce que pastec'est déjà pris), mais vous pouvez aussi l'appeler différemment.

Pour créer le fichier de script dans un emplacement où chaque utilisateur peut l'exécuter sans avoir à spécifier le chemin complet (je le recommande /usr/local/binpour cela) et pour le rendre exécutable, exécutez simplement ces deux commandes:

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

Maintenant, vous pouvez simplement intégrer $(PASTE)vos commandes sur un TTY pour y insérer le contenu du presse-papiers de votre bureau.

Byte Commander
la source
2
Merci! Cela m'aidera avec beaucoup plus de choses maintenant que ce que j'avais demandé à l'origine! :)
1
Vous pouvez même stocker en DISPLAY=:0 xsel -obtant qu'alias Bash ou petit script n'importe où (nommons-le PASTE) et n'utiliser qu'un formulaire raccourci comme $(PASTE)pour utiliser le contenu du presse-papiers dans vos commandes.
Byte Commander
Très belle approche
Sergiy Kolodyazhnyy
21

Personnellement, j'utilise juste des fichiers texte:

  1. Dans votre environnement de bureau, ouvrez un terminal et

    echo "whatever long text you have copied" > file
    
  2. Passez au tty et

    $(cat file)
    
terdon
la source
2
C'est bon à savoir. En fait, je ne pensais pas qu'une simple commande comme celle-ci fonctionnerait si bien. Parfois, l'esprit pense juste trop compliqué. Merci! =)
Terrance
1
J'utilise simplement some-command 'shift + insert (pour coller). 'revenir. Le collage à l'intérieur de guillemets simples ou doubles empêche les sauts de ligne dans le texte collé d'exécuter la commande avant que je puisse le modifier pour résoudre les problèmes. IDK ce qu'il vous gagne pour mettre le texte dans un fichier. Bash a des touches d'édition de ligne très puissantes, comme la flèche ctrl-gauche ou ctrl-droite pour se déplacer par les mots. alt-backspace pour supprimer les mots en arrière. Alt-d pour supprimer les mots suivants, etc. etc.
Peter Cordes
Oh, je viens de comprendre que l'OP signifie une console texte VT quand il dit TTY. Quelqu'un devrait vraiment éditer la question, car chaque terminal sur lequel vous pouvez exécuter un shell est un tty, y compris les pseudo-terminaux contrôlés par des programmes de type xterm.
Peter Cordes
@PeterCordes oui mais le terme "tty" est souvent, s'il est inexact, utilisé pour désigner des consoles virtuelles.
terdon
4

Une autre solution de contournement possible non répertoriée ci-dessus implique l'utilisation vim, le collage et l'exécution :!unix_commanden mode commande:

  1. copier les commandes et le chemin vers le presse-papiers
  2. ouvrir vim, passer en mode commande Esc, entrer l'invite:
  3. tapez un bang ! puis collez Ctrl+ Shift+ Vla commande que vous avez précédemment copiée dans l'invite et exécutez
Marcellinov
la source