Ruby에는 호출 된 스크립트의 이름을 제공하는 세 가지 방법이 있습니다.
puts "$0 : #{$0}"
puts "__FILE__ : #{__FILE__}"
puts "$PROGRAM_NAME : #{$PROGRAM_NAME}"
이 코드를 "test.rb"로 저장하고 몇 가지 방법으로 호출하면 스크립트가 OS에 의해 전달 된 이름을받는 것을 알 수 있습니다. 스크립트는 OS가 알려주는 내용 만 알고 있습니다.
$ ./test.rb
$0 : ./test.rb
__FILE__ : ./test.rb
$PROGRAM_NAME : ./test.rb
$ ~/Desktop/test.rb
$0 : /Users/ttm/Desktop/test.rb
__FILE__ : /Users/ttm/Desktop/test.rb
$PROGRAM_NAME : /Users/ttm/Desktop/test.rb
$ /Users/ttm/Desktop/test.rb
$0 : /Users/ttm/Desktop/test.rb
__FILE__ : /Users/ttm/Desktop/test.rb
$PROGRAM_NAME : /Users/ttm/Desktop/test.rb
~
두 번째 예에서 $ HOME 의 바로 가기를 사용하여 호출 하면 OS가 세 번째 예와 일치하는 확장 된 경로로 대체되는 것을 보여줍니다. 모든 경우에 OS가 전달한 것입니다.
하드 링크와 소프트 링크를 모두 사용하여 파일에 링크하면 일관된 동작이 나타납니다. test1.rb에 대한 하드 링크와 test2.rb에 대한 소프트 링크를 만들었습니다.
$ ./test1.rb
$0 : ./test1.rb
__FILE__ : ./test1.rb
$PROGRAM_NAME : ./test1.rb
$ ./test2.rb
$0 : ./test2.rb
__FILE__ : ./test2.rb
$PROGRAM_NAME : ./test2.rb
ruby test.rb
스크립트 이름의 변형을 사용하여 시작 하면 일관된 결과가 반환됩니다.
호출 된 파일 이름 만 원하는 경우 basename
변수 중 하나와 함께 File의 메서드를 사용 하거나 구분 기호로 분할하고 마지막 요소를 사용할 수 있습니다.
$0
그리고 __FILE__
약간의 차이가 있지만 하나의 스크립트 그들은 동등한 것.
puts File.basename($0)
File.basename
, File.extname
및 File.dirname
일련의 메서드 를 사용하면 몇 가지 이점 이 있습니다. basename
제거 할 확장자 인 선택적 매개 변수를 취하므로 확장자없이 기본 이름 만 필요한 경우
File.basename($0, File.extname($0))
휠을 재발 명하거나 가변 길이 또는 누락 된 확장을 처리 할 필요없이 확장 체인 " .rb.txt
"을 잘못 절단 할 가능성이 없습니다 . 예를 들면 다음과 같습니다.
ruby-1.9.2-p136 :004 > filename = '/path/to/file/name.ext'
=> "/path/to/file/name.ext"
ruby-1.9.2-p136 :005 > File.basename(filename, File.extname(filename))
=> "name"
ruby-1.9.2-p136 :006 > filename = '/path/to/file/name.ext' << '.txt'
=> "/path/to/file/name.ext.txt"
ruby-1.9.2-p136 :007 > File.basename(filename, File.extname(filename))
=> "name.ext"