5

enter image description here

gsettings set org.gnome.desktop.interface clock-show-date true

I want to copy this command into the clipboard so that I can paste it in a file or an Ask Ubuntu question easily.

I know I can copy this by selecting it and pressing Ctrl+Shift+C, but I want to get a mouse free answer.

dessert
  • 39,982
alhelal
  • 2,621

1 Answers1

5

You can use bash’s History Expansion, to copy the previous command line to your clipboard without performing command substitution, expansions etc. do:

echo !!:q | xclip -sel clip # or respectively
echo !!:q | xsel -ib

!! is a shortcut for !-1, referring to the previous command. Colon : precedes the modifier q, which lets the expansion quote the substituted words with single quotes to prevent further substitutions.

Example run

$ uname -r                        # run your command
4.10.0-35-generic
$ echo !!:q | xclip -sel clip     # copy the previous command to clipboard 
echo 'uname -r' | xclip -sel clip # this line shows what’s done
$ xclip -sel clip -o              # print clipboard content (just for testing)
uname -r
$ $(xclip -sel clip -o)           # run command stored in clipboard (just for testing)
4.10.0-35-generic

To simplify this you can create an alias or set a keyboard shortcut in the settings. Read man bash/HISTORY EXPANSION and man history to learn more about history expansion.

dessert
  • 39,982
  • @alhelal Added. :) – dessert May 26 '18 at 11:08
  • This works for some easy cases, but as soon as input/output redirection, command substitution or similar things (i.e. anything the shell interprets) come into play it won't copy the literal command to clipboard. – Lienhart Woitok May 26 '18 at 11:23
  • @LienhartWoitok You’re totally right, luckily there’s the modifier q to [q]uote the substituted words, escaping further substitutions – I edited my answer. Thanks a lot for this helpful remark! – dessert May 26 '18 at 11:58