It’s really something to be learning Linux. The more I learn about Linux the more I learn it’s about manipulating letters and numbers (well, this is more programming than anything but Linux is a lot about that). Bash I’m discovering is great; I’m just getting into it and now have made things a good deal easier by learning how to copy and paste text from the command line via the Xorg server clipboard. Here is a couple commands that can do it with examples, following them are a couple bash scripts that make this easy as can beasy.
The Programs
xsel
and xclip
are command line programs that can redirect the contents of the Xorg server clipboard. The Xorg server has two clipboards: the common right-click > Copy, and one for the middle-mouse click. For those that don’t know of it yet, the middle-click clipboard allows quick copy and pasting without having to enter a menu or using Ctrl + v. Anytime you select text on the Xorg server there is a separate register that records this text, then clicking the middle-mouse button (sometimes called the mouse button three [usually done by clicking down the scroll wheel] will paste the text. The Xorg server defines the the middle-click clipboard as primary and the right-click clipboard as secondary.
xclip
Here are the basics of using xclip
. xclip
, I prefer over xsel
because I have found that xsel
can have problems pasting to java apps.
xclip
can be used in a variety of ways. First, for example, it can be piped to:
echo "hi" | xclip -selection clipboard
This will copy to the standard clipboard. For abbreviation, you can use c
instead of clipboard
. You can specify primary
or p
here too to copy to the middle-mouse button, but isn’t necessary as this is the default for xclip
.
echo "hello" | xclip
To direct a file to xclip
the -in or -out options are needed:
xclip -in -selection c <filename> xclip -out -selection c <filename>
Which will respectively put a file into the clipboard, and write to a file from the clipboard contents.
To make the process quicker, I’ve created a couple scripts to automate the tasks called cb-in
and cb-out
and can be used like a standard command:
cb-in pack File pack copied to the clipboard
cb-in
#!/bin/bash | |
# Copy file or pipe to Xorg clipboard | |
# Required program(s) | |
req_progs=(xclip) | |
for p in ${req_progs[@]}; do | |
hash "$p" 2>&- || \ | |
{ echo >&2 " Required program \"$p\" not installed."; exit 1; } | |
done | |
# Check user is not root (root doesn't have access to user Xorg server) | |
if [[ "$USER" == root ]]; then | |
echo " Must be regular user to copy a file to the clipboard" | |
exit | |
fi | |
# Copy stdin to clipboard | |
if ! [ -t 0 ]; then | |
echo -n "$(< /dev/stdin)" | xclip -selection clipboard && \ | |
echo " Copied stdout to clipboard" | |
# Copy file to clipboard | |
else | |
# Display usage if no parameters given | |
if [[ -z "$@" ]]; then | |
echo " ${0##*/} <filename> - copy a file to the clipboard | |
command | ${0##*/} - copy stdout to the clipboard" && exit | |
fi | |
# Copy file to clipboard | |
if [[ ! -f "$@" ]]; then | |
echo "$warn File ${txtund}$filename${txtrst} doesn't exist" && exit | |
else | |
xclip -in -selection clipboard "$@" && \ | |
echo " Copied file "$@" to the clipboard" | |
fi | |
fi |
cb-out
#!/bin/bash | |
# Paste contents of Xorg clipboard to a file from the command line | |
filename=$@ | |
pasteinfo="clipboard contents" | |
# Display usage if no parameters given | |
if [[ -z "$@" ]]; then | |
echo " ${0##*/} <filename> - paste contents of context-menu clipboard to file" | |
exit | |
fi | |
# If filename matches a directory name exit | |
if [ -d "$filename" ]; then | |
echo " Directory already has the name ""$filename""" && exit | |
fi | |
# Check if file exists, prompt to append or override, else create new | |
if [[ -f "$filename" ]]; then | |
echo " File \""${filename##*/}"\" already exists - (e)xit, (a)ppend, (o)verwrite: " | |
read edit | |
case "$edit" in | |
[aA] ) xclip -out -selection clipboard >> "$filename" | |
echo " File \""$filename"\" appended with clipboard contents" | |
;; | |
[oO] ) xclip -out -selection clipboard > "$filename" | |
echo " File \""$filename"\" overwrote with clipboard contents" | |
;; | |
* ) exit | |
esac; | |
else | |
xclip -out -selection clipboard >> "$filename" | |
echo " File \""$filename"\" created with clipboard contents" | |
fi |
xsel
To copy to the context-menu clipboard:
xsel --clipboard < /etc/fstab
To copy a text to the middle mouse button clipboard:
xsel < /etc/fstab
xsel
can be piped too:
echo "a-bit-of-text" | xsel -b cat /etc/make.conf | xsel -b
To output directly to the terminal:
xsel --clipboard
And to redirect and append to a file:
xsel --clipboard > Baada-Boom.txt xsel --clipboard >> ~/.Baada-Boom
cp2clip (xsel)
#!/bin/bash # cp2clip - copy to the clipboard the contents of a file # Program name from it's filename prog=${0##*/} # Text color variables bldblu='\e[1;34m' # blue bldred='\e[1;31m' # red bldwht='\e[1;37m' # white txtbld=$(tput bold) # bold txtund=$(tput sgr 0 1) # underline txtrst='\e[0m' # text reset info=${bldwht}*${txtrst} pass=${bldblu}*${txtrst} warn=${bldred}!${txtrst} filename=$@ # Display usage if full argument isn't given if [[ -z $filename ]]; then echo " $prog <filename> - copy a file to the clipboard" exit fi # Check that file exists if [[ ! -f $filename ]]; then echo -e "$warn File ${txtund}$filename${txtrst} doesn't exist" exit fi # Check user is not root (root doesn't have access to user Xorg server) if [[ $(whoami) == root ]]; then echo -e "$warn Must be regular user to copy a file to the clipboard" exit fi # Copy file to clipboard, give feedback xsel --clipboard < "$filename" echo -e "$pass ${txtund}"${filename##*/}"${txtrst} copied to clipboard"
clippaste (xsel)
#!/bin/bash # clippaste - Paste contents of clipboard to file in terminal. # use 'xclip -out -selection primary' for middle click clipboard # Program name from it's filename prog=${0##*/} # Text color variables bldblu='\e[1;34m' # blue bldred='\e[1;31m' # red bldwht='\e[1;37m' # white txtbld=$(tput bold) # bold txtund=$(tput sgr 0 1) # underline txtrst='\e[0m' # text reset info=${bldwht}*${txtrst} pass=${bldblu}*${txtrst} warn=${bldred}!${txtrst} filename=$@ pasteinfo="clipboard contents" # usage if argument isn't given if [[ -z $filename ]]; then echo "clippaste <filename> - paste contents of context-menu clipboard to file" exit fi # check if file exists, prompt to append or override, else create new if [[ -f $filename ]]; then echo -en "$warn File ${txtund}$filename${txtrst} already exists - (${txtbld}e${txtrst})xit, (${txtbld}a${txtrst})ppend, (${txtbld}o${txtrst})verwrite: " read edit case "$edit" in [aA] ) xsel --clipboard >> $filename echo -e "$pass File ${txtund}$filename${txtrst} appended with clipboard contents" ;; [oO] ) xsel --clipboard > $filename echo -e "$pass File ${txtund}$filename${txtrst} overwrote with clipboard contents" ;; * ) exit esac; else xsel --clipboard >> $filename echo -e "$pass File ${txtund}"$filename"${txtrst} created with clipboard contents" fi
Great to find out about xsel! Unfortunately two of you examples are wrong:
echo “a-bit-of-text” | xsel -c
cat /etc/make.conf | xsel -c
do not copy “a-bit-of-text” or /etc/make.conf to the clipboard. They should be written:
echo “a-bit-of-text” | xsel –clipboard
cat /etc/make.conf | xsel –clipboard
or, as I prefer, with the -b flag (equivalent to –clipboard, 8 characters shorter)
echo “a-bit-of-text” | xsel -b
cat /etc/make.conf | xsel -b
The xsel -c flag does exist and is useful. It clears the clipboard. Forexample:
xsel -c -b
Or, if you want to clear the X Server clipboard (middle click clipboard), simply type
xsel -c
Enjoy!
Huh, hmm that did work the last time I used it. Wonder if xsel option have changed since, looks like it does. Thanks for the tip Colin. I use xclip now so it’s a good time to update post.
Awesome, thanks for the info
I really need this to copy between the primary and the clipboard for apps which don’t know about the primary eg netbeans.
Very nice Gen2ly, thanks for the idea!
_______________________
Neat. Thanx.
Thank you.
This is awesome, thakns so much!
Pingback: Contributing to exherbo with git patch « Rofrol blog
Pingback: How to copy to clipboard using bash command?
Pingback: Acessar clipboard do X com o xclip | Daemonio's Labs
If you use xclip in conjunction with truecrypt you should be careful and use
truecrypt .pass /media/pass
cat /media/pass/password | xclip
truecrypt -d .sec
instead of
xclip -in /media/pass/password
because otherwise xclip will lock the file and you will get the following error message, when truecrypt tries to unmount the volume:
umount: /media/pass: device is busy.
Pingback: linux command to copy text to clipboard « Shafiul Azam's Weblog
Pingback: Copiar texto desde la terminal al portapapeles a través de comandos « El Hombre que Reventó de Información
Pingback: URL Shortening Key | Blogging Attempt 2
знакомства интим николаев знакомства в пензе секс русские секс знакомства знакомства для секса смоленск свингер знакомства знакомства для сексу знакомства для секса в щелково волгоград знакомства для секса знакомства для секса саранск http знакомства знакомства секс львов мобильные знакомства для секса подольск знакомства интим знакомства интим ташкент знакомства секс спб
знакомства для сек знакомства секс великий новгород цель знакомства секс братск секс знакомства журнал знакомства
дубна секс знакомства знакомства для секса киров знакомства яндекс г бузулук знакомства секс знакомства г уфа знакомства подольск секс идеал знакомства знакомства рязань ярмарка без регистрации интим знакомства знакомства без регистрации в белгороде
знакомства для секса киев секс знакомства в тюмени ссекс знакомства знакомства для секса саратов секс знакомства мурманск
винница секс знакомства трансексуалы знакомства знакомства для секса в крыму секс знакомства г уфа знакомства для секса саранск
It help me much. Thank!
Мы устанавливаем натяжные потолки в
Серпухове не дорого, с гарантией!
Свисните где драйвер motherboard sony nw e002f драйвер загрузить
И не нужно кривить свою модерскую харю xerox workcentre 3119 драйвер принтера драйвер на mini dv драйвер radeon 5800 драйвер для принтера brother dcp 7030r
Pingback: Delicious Bookmarks for June 25th through June 26th « Lâmôlabs