2011-10-12 2 views
3

다음과 같이 아래의 루비 코드의 의도 된 동작은 다음과 같습니다변경 동작은 도착

  1. 쓰기 ARGV [0], 오래된 명령 행에라는 파일, 사용자가 임시 파일

을 제거 입력을

  • 을 제공 할 때까지
  • 해당 파일
  • 루프의 새로운 임시 복사본을 만들 때 내가 하드 코드 된 hello.c와 같습니다. Do 루프 내부의 Timeout은 예상대로 작동합니다. 키보드 입력이 3 초 동안 기다리지 않습니다. 아무 것도 입력되지 않으면 구조 블록을 입력하고 반복합니다.

    old를 ARGV [0] (hello.c 임)와 동일하게 설정하면 fp에 hello.c의 첫 번째 줄이 할당되고 코드가 루프에서 분리됩니다.

    나는 그것을 실행 방법 :

    [email protected] live$ ruby test.rb hello.c 
    hello.c 
    #include <stdio.h> 
    [email protected] live$ 
    

    코드 : 명령 줄에서 읽는 것은 하드 파일 이름을 코딩보다 다른 것이 왜 이해가 안

    #!/usr/bin/env ruby 
    
    require 'timeout' 
    
    old = ARGV[0].chomp 
    puts old # sanity check 
    # old = 'hello.c' 
    new = 'tmp_' + old 
    `cp #{old} #{new}` 
    
    fp = nil 
    loop do 
        begin 
        Timeout::timeout(3) { fp = gets } 
        puts fp # sanity check 
        break if (fp) 
        rescue Timeout::Error 
        # ... 
        end 
    end 
    
    `rm #{new}` 
    

    합니다.

    도움을 주시면 감사하겠습니다. 감사.

  • 답변

    3

    확인 docs :

    Kernel.getsARGV이 설정되어 있는지 볼 경우, 그들을 사료 대신 표준 입력에서 읽기에 파일 이름으로 사용합니다. 그래서 expired를 사용하십시오 : $stdin.gets

    +0

    더 깊이 파고 들어야합니다. 이것으로 해결했습니다. 고마워요. – user992236