2013-02-18 3 views
10

루비에서 전체 명령 줄을 얻으려면 어떻게해야합니까?루비에서 전체 명령 줄을 얻는 방법은 무엇입니까?

$ 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

당신은 당신의 예에 레일 루비의 전체 ​​명령에 대해 질문, 그러나 말한다. 무엇 이니? 두 가지 모두 "명령 줄"을 가지고 있지만 응용 프로그램 계층이 매우 다릅니다. 그리고 "완전한 명령 줄"이란 무엇을 의미합니까? sh/bash/zsh 프롬프트? –

+0

@theTinMan은 내가 제공 한 샘플을 읽고 실행 했습니까? 나는 현재의 루비 프로세스에 대해'ps -eo "% a"'를 원한다. –

+0

당신은 레일즈 커맨드 라인 인 "rails c'라고 말합니다. 'ps'는 명령 행이 아닌 실행중인 프로세스 만 리턴 할 것입니다. 또한 명령 줄을 "반환"하지 않습니다. 'rails c '는 IRB를 기반으로하며, 둘 다 완전한 "명령 줄"입니다. 그것들은 Ruby 내부의 대화식 쉘이거나 Rails의 확장이로드 된 Ruby입니다. –

답변

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

나는 이것이 프로세스, gid pid/fork와 spawn을 결코 추상화하지 않았다고 추측한다. 코어 루비에서 스스로 발견 한 유닉스주의이다. –

관련 문제