How to paste commands into a TTY?

I have some rather long commands and file paths which I have copied to clipboard and need to execute in a TTY, however the file paths are too long to retype and I would like to just paste them in after the $ (I can retype the commands before them then), is there a way to do this?

So I would like to execute a command and have it on the next line starting with $ put the text copied to the clipboard like so:

$ specialCommandToPasteText
$ pastedText

I am running Ubuntu GNOME 16.04 with GNOME 3.20.


Solution 1:

It's simple, but you need an additional tool.

  1. Install the package xsel which provides an easy command to access the clipboard:

    sudo apt-get install xsel
    
  2. Find out which $DISPLAY your desktop is using. Usually it should be :0, but you can check it by running this command in a terminal emulator on your GUI desktop:

    echo $DISPLAY
    

    I will assume the output is :0, replace that with your actual output in the following commands if it's different.

  3. Copy the command you would like to execute in the TTY, e.g. using Ctrl+C.

  4. Switch to the TTY you want to use, e.g. to TTY1 using Ctrl+Alt+F1.
    Log in by typing your username and password.

  5. Enter the full command you wish to run, but replace the part you want to insert from the clipboard with $(DISPLAY=:0 xsel -ob).

    For example if you copied a large list of packages to install, you could type this into the TTY:

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

    The clipboard snippet does not necessarily have to be at the end of your command though, it may appear anywhere.


To simplify things further, let's move this still a bit complicated DISPLAY=:0 xsel -ob to a script. I'll name it PASTE (because paste is already taken), but you can also call it differently.

To create the script file in a location where every user can run it without having to specify the full path (I recommend /usr/local/bin for this) and to make it executable, simply run those two commands:

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

Now you can simply embed $(PASTE) into your commands on a TTY to insert the clipboard content from your desktop there.

Solution 2:

Personally, I just use text files:

  1. In your desktop environment, open a terminal and

    echo "whatever long text you have copied" > file
    
  2. Drop to the tty and

    $(cat file)
    

Solution 3:

Another possible workaround not listed above involve the use of vim, pasting and running :!unix_command in command mode:

  1. copy the commands and the path to the clipboard
  2. open vim, go to command mode Esc, enter the prompt :
  3. type a bang ! and then paste Ctrl + Shift + V the command you previously copied in the prompt and execute