2013-02-18 5 views
10

Wie bekomme ich die vollständige Befehlszeile in Ruby?Wie bekomme ich die volle Befehlszeile in 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" 

Gibt es etwas saubereres als Ninja ps kann ich tun, um die gleichen Ergebnisse zu erhalten?

Um zu klären, falls es Verwirrung ist, möchte ich genau die gleiche Ausgabe wie:

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

ARGV wird wieder leer kommen.
$ 0 fehlt der vollständige Pfad.

+1

Sie fragen nach einer vollständigen Befehl in Ruby, aber dann in Ihrem Beispiel sagen Rails. Welches ist es? Beide haben "Befehlszeilen", aber sie sind sehr unterschiedliche Anwendungsschichten. Und was meinst du mit "vollständige Befehlszeile"? Eine sh/bash/zsh-Eingabeaufforderung? –

+0

@theTinMan hast du die von mir bereitgestellte Probe gelesen und ausgeführt? Ich möchte 'ps -eo"% a "' für meinen aktuellen Ruby-Prozess. –

+0

Sie sagen "' Schienen c' ", die eine Rails-Befehlszeile ist. 'ps' irgendetwas wird nur einen laufenden Prozess zurückgeben, keine Befehlszeile. Keiner wird eine Befehlszeile "zurückgeben". 'rails c' basiert auf IRB und ist auch keine vollständige" Kommandozeile ". Sie sind interaktive Shells in Ruby oder Ruby mit Rails Erweiterungen geladen. –

Antwort

6

ich verwenden würde:

#!/usr/bin/env ruby 

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

Rennen, die in einem Skript-Ausgänge:

 
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

Ich folge, ich denke, das hat sich nie in Prozess abstrahiert, gip pid/fork und spawn sind Unix, die sich im Kernrubin gefunden haben –

Verwandte Themen