2014-12-03 5 views
9

Sto provando a passare la matrice contenuta in una variabile globale che ho creato negli appunti sul mio mac.Come posso passare i dati di testo dalla console Ruby negli appunti senza salvarli in un file?

È molto lungo quindi non voglio evidenziare, copiare & incolla sulla mia console.

Desidero utilizzare il codice unix incorporato, in particolare la funzione pbcopy per la console del laptop mac che consente di passare il testo negli appunti del computer, pronto per essere incollato.

se io faccio con un file-save, mi piacerebbe fare qualcosa di simile (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` 

Ma avrei potuto fare questo senza creare un file temporaneo?

Sono sicuro che questo è possibile. Tutte le cose nel testo sono possibili. Grazie in anticipo per la soluzione

+1

Vedi questo: https://coderwall.com/p/qp2aha/ruby-pbcopy-and-pbpaste – emaxi

risposta

15

Si può semplicemente echo invece se non ci sono caratteri di nuova riga nella stringa; in caso contrario, utilizzare la classe IO.

Uso echo:

system "echo #{stringdata} | pbcopy" 

O

`echo #{stringdata} | pbcopy` 

rubino poi solo strappare il testo a memoria, iniettarlo nel comando shell che si apre un condotto tra i processi echo e pbcopy .

Uso della classe IO:

Se si vuole farlo nel modo Ruby, abbiamo semplicemente creato un tubo con pbcopy utilizzando la classe IO. Questo crea un file condiviso tra i processi a cui scriviamo e da pbcopy si leggerà.

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

+0

Non avrei dovuto mettere il testo in citazioni di una sorta?? –

+0

No, 'echo' non richiede questo. Prova questo codice in IRB: 'echo # {" helllo this is my test "} | pbcopy' ... Sarai quindi in grado di incollare "Ciao questo è il mio test" dagli appunti. – ianks

+0

Ho appena aggiornato la risposta con uno stile Ruby più idiomatico. – ianks

4

È possibile utilizzare my clipboard gem di Ruby-API negli appunti di sistema (che è anche la piattaforma independet, su MacOS userà lo stesso pbcopy di utilità sotto il cofano), in modo che si può utilizzare da IRB:

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

Di solito, il metodo copy restituisce la stringa che è stato copiato. Questo è il motivo del bit ;p: È un trucco per restituire nil in modo che la console non visualizzi i dati di stringa effettivi.

1

Ecco un metodo semplice di una riga è possibile incollare nella vostra console IRB:

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

Una volta che è definito si può semplicemente fare

pbcopy stringdata 

o copiare il risultato dell'ultimo comando con

pbcopy _ 

Naturalmente, è anche possibile inserire la definizione del metodo in un inizializzatore o qualcosa del genere, ad esempio .irbrc o .pryrc se si utilizza pry. Ecco una versione più bella e un po 'più intelligente:

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

Questo ha funzionato per me. Risposta accettata no. errore "nome file troppo lungo" ". Grazie! – iamse7en

Problemi correlati