ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Programming Ruby (28) 루비 세팅하기
    Ruby 2016. 11. 17. 23:01




    명령행 인자

    루비 명령행은 세 부분으로 나뉜다. 루비 인터프리터 옵션, 그리고 실행해야 할 프로그램 이름, 프로그램의 매개 변수 집합이다.

    ruby <옵션> <--> <프로그램 파일> <매개 변수>*

    루비 옵션은 명령행 중에서 하으픈으로 시작하지 않은 부분이 나오기 전까지 또는 특별한 플래그인 --(하이픈 두 개)가 나오기 전까지다. 


    명령행 옵션

    -0 [octal]
    숫자 0 플래그는 레코드 구분 문자를 명시한다 -00으로 문단 모드가 되며 두 개의 연속되는 기본 레코드 구분자로 구분된다 

    -a
    -n이나 -p와 함께 사용하면 자동 분할을 가리킨다. 각 루프 반복 첫 부분에 $F=$_.split를 실행하는 것과 동일하다.

    -C 디렉터리
    실행하기 전에 작업 디렉터리를 이동한다. 

    -c
    문법 검사만 실행한다. 프로그램은 실행하지 않는다. 

    --copytight
    저작권을 보여주고 종료한다.

    -d, --debug
    $DEBUG와 $VERBOSE를 true로 설정한다. 이 옵션은 프로그램을 추가로 추적(디버깅)할 수 있도록 도와준다. 

    --disable-all
    rubygems와 RUBYOPT 옵션을 비활성화한다

    --disable-gems
    require로 루비젬을 자동으로 로드하지 않도록 한다. 반대 옵션으로 --enable-gems 옵션이 있다. 

    --disable-rubyopt
    루비가 RUBYOPT 환경 변수를 참조하지 않도록 한다. 이는 보안이 필요한 환경에서 사용할 수 있다.반대 옵션으로 --enable-rubyopt 옵션이 있다.

    --dump option....
    루비의 내부 상태를 담은 다양한 정보를 덤프한다. options.. 에는 쉼표(,)나 공백으로 구분되는 하나 이상의 옵션이 올 수 있다. 사용 가능한 옵션으로는 copyright, insns, parsetree, parsetree_with_comment, syntax, usage, version, yydebug가 있다. 이 옵션은 루비 코어 개발자들이 사용한다.

    --enable-all 
    rubygems, RUBYOPT 옵션을 활성화한다.

    --enable-gems
    require로 루비젬을 자동으로 로드하도록 한다. 반대 옵션으로 --disable-gems 옵션이 있다. 

    --enable-rubyopt
    루비가 RUBYOPT 환경 변수를 사용하도록 설정한다.

    -E encoding, --encoding encoding, --encoding==encoding
    외부 리소스에 대한 읽기와 쓰기에 대해 사용할 기본 문자 인코딩을 지정한다. 

    -e 'command'
    command를 한 줄의 루비 소스 코드로 실행한다. 이 옵션을 여러 번 사용할 수 있으며, 한 프로그램의 여러 줄로 인식된다. 프로그램 파일이 생략되고 -e옵션이 존재하면 -e 옵션에 지정한 명령어를 실행하고 실행을 종료한다. 


    나머지 내용은 책을 참조하길..




    인자 분석: ARGV와 ARGF 

    프로그램 파일 이름 뒤에 매개 변수는 프로그램 내에서 전역 변수 배열 객체 ARGV로 이용 가능하다.

    ARGV.each { | arg | p arg }

    이 파일을 다음처럼 실행해보자.

    $ ruby -w test.rb "Hellow World" a1 1.6180

    실행결과
    "Hello World"
    "a1"
    "1.6180"


    여기서 주의할 점은 C와는 달리 ARGV[0]이 프로그램의 첫 번째 매개 변수이지 프로그램 이름이 아니라는 점이다. 


    ARGF
    명령행 프로그램에서 프로그램이 처리하려는 0개 이상의 파일목록을 받아오는 방법은 흔히 사용된다. 루비는 이를 위해 ARGF 라고 하는 넘겨받는 파일들에 쉽게 접근할 수 있도록 도와주는 객체를 제공한다. 프로그램이 실행되면 ARGF가 초기화되고 ARGV를 참조한다. 이는 참조이므로 ARGV를 변경하면 (예를 들어 옵션을 처리하고 삭제하면) ARGF에도 영향을 준다. 
    ARGF에서 읽어오거나, 표젼 입력을 읽어오면 루비는 ARGV의 첫 번째 요소의 이름을 가진 파일을 열고 여기에 I/O  작업을 수행한다.계속 읽어나가면 파일의 마지막에 다다를 것이고 이때 루비는 파일을 닫고 ARGV 배열의 다음 요소로 넘어가서 파일을 연다. 계속해서 파일을 읽고 모든 파일을 다 읽어 마지막 파일의 EOF에 다다를 것이다. ARGV가 비어 있다면 ARGF는 표준 입력으로부터 읽어올 것이다. 

    현재 읽고잇는 파일의 이름은 ARGF.filename 으로 얻어올 수 있고 현재 파일 객체는 ARGF.file 로 얻어올 수 있다. ARGF의 모든 줄 수는 ARGF.lineno를 통해 알 수 있으며, 현재 파일의 줄 번호는 ARGV.file.lineno를 통해 알 수 있다. 다음은 이러한 정보를 사용하는 프로그램 예제다.

    while line = gets
        printf " %d: %10s[%d] %s", ARGF.lineno, ARGF.filename, ARGF.file.lineno, line
    end

    이를 실행하면 파일 이름들을 넘겨주고 그 안에 들어 있는 파일 내용을 복사할 것이다.

    $ ruby copy.rb testfile otherfile
    1: testfile[1] This is line one
    2: testfile[2] This is line two
    3: testfile[3] This is line three
    4: testfile[4] And so one...
    5: otherfile[1] ANOTHER LINE ONE
    6: otherfile[2] AND ANOTHER LINE TWO
    7: otherfile[3] AND FINALLY THE LAST LINE


    제자리 편집

    제자리 편집(in-place editing)은 펄에서 유래한 트릭이다. 이는 명령행에서 넘겨진 파일을 바로 편집할 수 있도록 해 주며 원래 파일의 콘텐츠를 별도로 백업 해서 보관해 준다. 제자리 편집을 사용하려면 루비에 백업 파일 확장자를 지정해 줘야 한다. 이는 -i [ext] 명령행 옵션이나 코드상에서 ARGF.inplace_mode=ext를 통해 할 수 있다. 

    이제 명령행을 통해 파일을 읽어올 때 루비는 원래 파일의 이름을 변경하고 주어진 백업 확장자를 덧붙인다. 이를 통해 원래 이름을 가진 새로운 파일을 생성하고 이를 열어서 표준 출력에 쓴다. 다음과 같이 작성할 수 있다.

    while line = gets
        puts line.chomp.reverse 
    end

    이 프로그램은 다음과 같이 사용한다.

    $ ruby -i.bak reverse.rb testfile otherfile

    이제 testfile 과 otherfile은 각 줄이 뒤집어 졌으며 원래의 파일은 testfile.bak과 otherfile.bak 에서 찾을 수 있다. 



    프로그램 종료

    Object#exit 메서드는 프로그램을 종료하고, 운영 체제에 종료 상태값을 반환한다. 하지만 다른 언어와 달리 exit 메서드가 프로그램을 즉시 종료시키지 않는다. Object#exit는 일단 SystemExit 예외를 발생시키는데 이를 잡아서 등록된 at_exit 메서드와 객체 소멸자를 포함한 정리 동작을 수행한다.


    환경 변수

    변수 ENV를 사용하면 운영 체제에 정의된 환경 변수에 접근할 수 있다. 이 변수에는 Hash 메서드를 사용할 수 있다. 

    ENV['SHELL']
    ENV['HOME']
    ENV['USER']
    ENV.keys.size
    ENV.keys[0, 4]

    일부 환경 변수의 값은 루비가 처음 실행될 때 읽는다. 이러한 변수들의 값은 인터프리터의 동작 방식을 변화시킨다. 

    메모리와 관련된 환경변수는 다음과 같다.

    RUBY_THREAD_VM_STACK_SIZE
    스레드를 만들 때 VM 스택 크기를 지정한다. 128KB(32비트 CPU) 256KB(64비트 CPU)

    RUBY_THREAD_MACHINE_STACK_SIZE
    스레드를 만들 때 머신 스택 크기를 지정한다. 512KB(32비트 CPU) 1024 KB(64비트 CPU)

    RUBY_FIBER_VM_STACK_SIZE
    파이버를 만들 때 VM 스택 크기를 지정한다. 64KB 또는 128KB

    RUBY_FIBER_MACHINE_STACK_SIZE
    파이버를 만들 때 머신 스택 크기를 지정한다. 256KB 또는 512KB


    시스템상의 환경 변수들의 현재 값은 RubyVM::DEFAULT_PARAMS 에서 확인할 수 있다.




    끄읕 


Designed by Tistory.