2011-12-05 3 views
3

유닉스/리눅스 시스템에서 chmod 함수는 "심볼릭 모드"를 지원합니다. chmod u+x ...은 사용자에게 실행 권한을 추가하는 상징적 인 형식입니다. Ruby의 FileUtils에있는 chmod 함수는 권한으로 절대 비트 마스크 만 지원합니다. 즉, FileUtils.chmod(0777, ...) 만 수행 할 수 있지만 FileUtils.chmod('u+x', ...)은 작동하지 않습니다.명시 적으로 시스템 명령어를 호출하지 않고 Ruby에서 chmod의 심볼릭 모드를 복제하기

이 작업을 수행하는 방법은 system 명령을 직접 호출하는 것입니다. 즉, system("chmod u+x ...") 명령을 직접 호출하는 것이지만 모든 곳에서 껍질을 생성하지 않고 가능한 한 Ruby 도메인에 코드를 유지하는 것이 좋습니다. 또는 File 객체, File.stat을 반복하고 기존 비트 마스크를 가져 와서 개별적으로 수정할 수 있지만 심볼 모드는 훨씬 더 간결하고 오류가 발생하지 않는 파일 glob을 지원합니다.

더 우아한 방법으로이를 수행 할 수있는 방법이 있는지 아는 사람이 있습니까?

답변

2

사용중인 Ruby 버전은 무엇입니까? 1.9.3 docs for FileUtils.chmod 봐 : 명명 된 파일 (목록)에

변경 허가 비트 모드로 표현되는 비트 패턴. 모드는 상징적 인 절대 모드 을 사용할 수 있습니다. 절대 모드는

FileUtils.chmod 0755, 'somecommand' 
FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb) 
FileUtils.chmod 0755, '/usr/bin/ruby', :verbose => true 

기호 모드 내가 루비 1.8.7를 사용하고

FileUtils.chmod "u=wrx,go=rx", 'somecommand' 
FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb) 
FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true 
+0

입니다, 그래서 그 기능은 아직 나에게 사용할 수없는 것 같아요. –

+0

업데이트하지 못하게하는 것이 있습니까? RVM 또는 rbenv를 사용하면 대체 Ruby 버전을 설치하고 앱 단위로 전환하는 것이 번거롭지 않습니다. –

+0

우리의 현재 운영 시스템은 아직 1.8에있는 Ubuntu Lucid에 붙어 있습니다. 실제로는 가장 최신 버전 인 Oneiric도 Ruby 1.8입니다. Debian 패키지는 Ruby를 수동으로 업그레이드 할 때 잘 작동하지 않습니다. 저는 RVM 기반 관리 시스템으로의 마이그레이션을 추진하려고 생각했지만 아직 없습니다. –