21

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.

4 Answers4

29

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.

Ashark
  • 278
Byte Commander
  • 110,243
23

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)
    
terdon
  • 104,119
5

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
Marcellinov
  • 3,389
  • 3
  • 16
  • 23
2

Another workaround with tmux that needs no configuration:

Launch tmux (Open terminal and type tmux) in the virtual "TTY" (Ctrl+Alt+F2 for Ubuntu) window and do your general work.

Whenever you need to paste something into that terminal session just open a regular desktop terminal (Ctrl+Alt+T) and enter tmux, then use keystrokes Ctrl+b , then w to list active sessions and find the one you wish to paste the content into. Once done, just close the terminal on your desktop and you may continue using "TTY" terminal as if you hadn't ever left it!