I'm trying to pass the array contained in a global variable I've created into my clipboard on my mac.
It is very long so I don't want to highlight, copy & paste on my console.
I want to use embedded unix code, specificially the pbcopy
function for the mac laptop console that allows me to pass text into my computers clipboard, ready to paste.
Were I to do this with a file-save, I'd do something like this (in ruby):
stringdata = <<blah blah blah process, lets say it failed and the progress data is stored in this variable so we can skip forward to where the script screwed up in a process when we start up and handle the error instance(s)>> File.open("temp.txt"){|f| f.write(stringdata)} `cat temp.txt | pbcopy`
But could I possibly do this without creating a temporary file?
I'm sure this is possible. All things in text are possible. Thanks in advance for the solution
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 true end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With