2013-02-18 64 views
10

如何在ruby中獲得完整的命令行?如何獲得完整的命令行在紅寶石?

$ rails c 
> $0 
=> "script/rails" 
> ARGV 
[] 
> `ps -eo "%p|$|%a" | grep '^\\s*#{Process.pid}'`.strip.split("|$|")[1] 
=> "/home/sam/.rvm/rubies/ruby-1.9.3-p194-perf/bin/ruby script/rails console" 

有什麼比忍者ps更清潔我可以做得到相同的結果嗎?

爲了澄清,如果有困惑,我想完全相同的輸出:

`ps -eo "%p|$|%a" | grep '^\\s*#{Process.pid}'`.strip.split("|$|")[1] 

ARGV是回來了空白。
$ 0缺少完整路徑。

+1

你問在Ruby中一個完整的命令,但後來說,Rails的在你的榜樣。這是什麼?兩者都有「命令行」,但它們是非常不同的應用程序層。而且,「完整的命令行」是什麼意思? sh/bash/zsh提示符? – 2013-02-18 04:00:18

+0

@theTinMan您是否閱讀並運行我提供的樣本?我想'ps -eo「%a」'爲我目前的ruby進程。 – 2013-02-18 04:34:48

+0

你說的是「rails c'」這是一個Rails命令行。 'ps'任何東西只會返回一個正在運行的進程,而不是命令行。也不會「返回」一個命令行。 'rails c'基於IRB,既不是完整的「命令行」。它們是Ruby中的交互式shell,或者是Rails加載的Ruby。 – 2013-02-18 04:38:55

回答

6

我會使用:

#!/usr/bin/env ruby 

puts "Process ID: #{ $$ }" 
puts `ps axw`.split("\n").select{ |ps| ps[ /\A#{ $$ }/ ] } 

運行裏面的腳本輸出:

 
18222 s000 S+  0:00.25 /Users/foo/.rbenv/versions/1.9.3-p385/bin/ruby /Users/foo/.rbenv/versions/1.9.3-p385/bin/rdebug /Users/foo/Desktop/test.rb 
+0

我遵循,我想這從來沒有抽象自己在過程中,gip pid/fork和spawn是發現自己在覈心ruby中的unixism – 2013-02-18 06:10:28