루비 로 셸 명령 을 실행 하 는 여섯 가지 방법

2385 단어 셸 명령
원문:http://blackanger.blog.51cto.com/140924/43730
운영 체제 셸 명령 을 호출 해 야 할 때 Ruby 는 우리 에 게 여섯 가지 임 무 를 완성 하 는 방법 을 제공 했다.
1. Exec 방법
 Kernel \ # exec 방법 은 현재 프로 세 스 대신 지정 한 명령 을 호출 합 니 다.
>>exec 'echo "hello $HOSTNAME"'
hello nate.local
 
주의해 야 할 것 은 exec 방법 은 echo 명령 으로 irb 프로 세 스 를 대체 하여 irb 를 종료 한 것 입 니 다.주요 단점 은 루비 스 크 립 트 에서 이 명령 이 성공 인지 실패 인지 알 수 없다 는 것 이다.
 
2. System 방법
  Kernel \ # system 방법 은 명령 이 같 지만 현재 프로 세 스 를 덮어 쓰 지 않도록 키 셸 을 실행 합 니 다.명령 이 성공 하면 true 로 돌아 갑 니 다. 그렇지 않 으 면 false 로 돌아 갑 니 다.
  >> system 'echo "hello $HOSTNAME"'
  hello nate.local
  => true
  >> system 'false' 
  => false
  >> puts $?
  256
  => nil
  >> 
 
3. 따 옴 표 (Backticks, Esc 키 아래 에 있 는 키)
$ irb
  >> today = `date`
  => "Mon Mar 12 18:15:35 PDT 2007n" 
  >> $?
  => #<Process::Status: pid=25827,exited(0)>
  >> $?.to_i
  => 0
 
이런 방법 은 가장 보편적 인 용법 이다.그것 도 하나의 셸 에서 실행 된다.
4.IO#popen
 $ irb
  >> IO.popen("date") { |f| puts f.gets }
  Mon Mar 12 18:58:56 PDT 2007
  => nil
 
5.open3#popen3
$ irb
  >> stdin, stdout, stderr = Open3.popen3('dc') 
  => [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]
  >> stdin.puts(5)
  => nil
  >> stdin.puts(10)
  => nil
  >> stdin.puts("+")
  => nil
  >> stdin.puts("p")
  => nil
  >> stdout.gets
  => "15n"
 
6.Open4#popen4
$ irb
  >> require "open4" 
  => true
  >> pid, stdin, stdout, stderr = Open4::popen4 "false" 
  => [26327, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]
  >> $?
  => nil
  >> pid
  => 26327
  >> ignored, status = Process::waitpid2 pid
  => [26327, #<Process::Status: pid=26327,exited(1)>]
  >> status.to_i
  => 256

좋은 웹페이지 즐겨찾기