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.
-
Install the package
xsel
which provides an easy command to access the clipboard:sudo apt-get install xsel
-
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. Copy the command you would like to execute in the TTY, e.g. using Ctrl+C.
Switch to the TTY you want to use, e.g. to TTY1 using Ctrl+Alt+F1.
Log in by typing your username and password.-
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:
-
In your desktop environment, open a terminal and
echo "whatever long text you have copied" > file
-
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:
- copy the commands and the path to the clipboard
- open
vim
, go to command mode Esc, enter the prompt : - type a bang ! and then paste Ctrl + Shift + V the command you previously copied in the prompt and execute