How might I pass text data from the ruby console into my clipboard without saving to a file? How might I pass text data from the ruby console into my clipboard without saving to a file? unix unix

How might I pass text data from the ruby console into my clipboard without saving to a file?


You can just echo it instead if there are no newline characters in the string; otherwise, use the IO class.

Using echo:

system "echo #{stringdata} | pbcopy"

OR

`echo #{stringdata} | pbcopy`

Ruby will then just rip the text from memory, inject it into the shell command which opens a pipe between the echo and pbcopy processes.

Using the IO class:

If you want to do it the Ruby way, we simply create a pipe with pbcopy using the IO class. This creates a shared files between the processes which we write to, and pbcopy will read from.

IO.popen("pbcopy", "w") { |pipe| pipe.puts "Hello world!" }


Here's a simple one-line method you can paste into your IRB console:

def pbcopy(arg); IO.popen('pbcopy', 'w') { |io| io.puts arg }; end

Once it's defined you can simply do

pbcopy stringdata

or copy the result of the last command with

pbcopy _

Of course, you can also put the method definition in an initializer or something, such as .irbrc or .pryrc if you use pry. Here's a prettier and slightly more intelligent version:

def pbcopy(arg)  out = arg.is_a?(String) ? arg : arg.inspect  IO.popen('pbcopy', 'w') { |io| io.puts out }  puts out  trueend


You can use my clipboard gem for a Ruby-API to the system clipboard (which is also platform independet, on macOS it will use the same pbcopy utility under the hood), so that you can use it from IRB:

require 'clipboard'Clipboard.copy(stringdata);p

Usually, the copy method returns the string which was copied. This the reason for the ;p bit: It is a trick to return nil so that the console would not display the actual string data.