2014-06-11 39 views
0

我正在尋找創建一個簡單的unix watch像命令使用Ruby來運行命令。但某些命令不保留顏色。舉例來說,我在執行才得以保全的顏色:使用紅寶石的簡單克隆unix手錶(帶彩色輸出)

puts %x{ CLICOLOR_FORCE=1 ls -la} 

*標誌的建議由john-c

我假設它是因爲當命令通過腳本調用的命令切換到可打印的文字版本,可能會緩解進一步的處理。聽說過這個,但沒有適當的指標/術語來做研究;有沒有辦法強制通過Ruby腳本的彩色輸出?或者「哄騙」這些命令,讓它認爲它是通過終端而不是腳本來調用的?

我沒有成功測試了以下內容:

puts %x{ CLICOLOR_FORCE=1 rspec --color test_file.rb } 

我知道有一個完善的方式去使用這種護rspec的。但是我正在追求這個我正在構建的寶石,並且我需要能夠運行保留彩色輸出的任意命令。

任何幫助將不勝感激。

回答

2

從腳本中調用時,您正確地運行的命令切換到非顏色輸出。他們檢測到他們的標準輸出不是終端並相應地修改他們的輸出。

幸運的是,您應該能夠通過使用pseudo-terminal來欺騙命令,使其認爲它們正在輸出到終端。你可以在Ruby中使用PTY module來做到這一點。

我從this answer獲得了以下內容,並在Ruby 1.9.3-p392上進行了測試。

require 'pty' 

PTY.spawn('ls --color=auto') do |stdin, stdout, pid| 
    begin 
    stdin.each {|line| print line} 
    rescue Errno::EIO 
    # End of input 
    end 
end 
2

衛隊runs the command使用Kernel#system子shell。這個工作對我來說:

$ ruby -e "system('ls -la')" 

$ ruby -e "system('rspec test_file.rb')" 
+0

哇感謝它的作品!我應該養成打開已經實現該功能的項目的習慣!但是,我認爲我應該把前面的答案作爲更重要的一點,儘管事實上我會使用這個答案。不管怎麼說,多謝拉。 –