irb에서 현재 작업 디렉토리의 절대 경로를 얻는 방법


273

차이가 있을지 모르겠지만 Windows에서 Ruby를 실행하고 있습니다. 내가하고 싶은 것은 현재 작업 디렉토리의 절대 경로를 얻는 것입니다. irb에서 가능합니까? 분명히 스크립트에서 사용할 수 있습니다File.expand_path(__FILE__)

그러나 irb에서 다음을 시도하고 "Permission denied"오류가 발생했습니다.

File.new(Dir.new(".").path).expand

10
질문은 실제로 명확하지 않습니다. a) 현재 작업 디렉토리 ()를 원하십니까? Dir.pwd또는 현재 실행중인 스크립트가있는 디렉토리 ( File.dirname(__FILE__))를 원하십니까? 다른 곳 (예 :)에서 스크립트를 호출한다고 가정 ruby testdirectory/testscript.rb하면 둘이 다를 수 있습니다.

1
@amenthes 당신은 내 질문이 명확하지 않다고 주장하고 "현재 작업 디렉토리를 원하십니까?"라고 묻고 제 질문은 " 현재 작업 디렉토리의 절대 경로를 얻는 것입니다 ..."라고 말합니다. 불분명합니까?
Dexygen

7
"스크립트에서 분명히"을 사용하는 것이 가능합니다. "라는 문장 때문에 명확하지 않습니다 File.expand_path(__FILE__).- __FILE__의 위치는 현재 작업중인 디렉토리 (와 Dir.pwd) 와 다른 동물 이기 때문에
amenthes

2
@amenthes 나는 질문 제목 (그리고 질문 자체 내에서 두 번)에있는 "irb"와 "스크립트에서"를 구별하는 꽤 좋은 일을했다고 생각했다
Dexygen

답변:


515

Dir.pwd 트릭을 수행하는 것 같습니다.

http://ruby-doc.org/core/Dir.html#method-c-pwd


4
거의 10 년이 지났지 만 여전히이 답변에 감사드립니다.
Nick Schwaderer

1
참고 : 현재 파일의 위치는 반환 하지 않습니다 . 그렇게하려면 아래 답변을 참조하십시오. 이것은 스크립트를 호출하는 쉘의 현재 작업 디렉토리 만 반환합니다 ( pwd). 스크립트 파일이있는 위치와 완전히 다를 수 있습니다.
GDP

186

File.expand_path File.dirname(__FILE__) 이 명령이 호출 된 파일을 기준으로 디렉토리를 반환합니다.

그러나 Dir.pwd작업 디렉토리를 반환합니다 ( pwd터미널에서 실행하는 것과 동일한 결과 )


3
Dir.pwd와 같습니다 pwd -P. exec('pwd -L')터미널에서 pwd와 동등한 값을 얻습니다 (pwd는 일반적으로 bash 내장이며 기호 링크를 확인하지 않습니다).
Barry Kelly

1
자주 잊혀진 Pathname 클래스를 보라
awenkhh

1
문제가 있습니다. Dir.pwd는 스크립트가 실행 된 작업 디렉토리를 인쇄합니다. 원하는 디렉토리가 아닐 수도 있습니다.
Brandon

예, bundle exec rspec spec'spec / spec_helper.rb'파일에서 '/ project'디렉토리에서 명령을 실행한다고 가정 하면 값 Dir.pwd은 여전히 ​​'/ project'입니다.
hiveer


6

현재 파일의 작업 디렉토리가 표시됩니다.

File.dirname(__FILE__)

예:

current_file : "/ 사용자 /nemrow/SITM/folder1/folder2/amazon.rb"

결과 : "/ Users / nemrow / SITM / folder1 / folder2"


1
작업 디렉토리는 실제 파일과 동일하지 않아야합니다. 따라서 Dir.pwd귀하의 제안은 잠재적으로 다를 수 있습니다.
Besi

4

현재 rb 파일 디렉토리의 전체 경로를 얻으려면 다음을 수행하십시오.

File.expand_path('../', __FILE__)

3

이를 통해 디렉토리에있는 모든 파일의 절대 경로를 얻을 수 있습니다.

File.join(Dir.pwd,'some-dir','some-file-name')

이것은 돌아올 것이다

=> "/User/abc/xyz/some-dir/some-file-name"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.