2011-12-05 1 views
3

Unix/Linuxシステムでは、chmod関数は "記号モード"をサポートしています。 chmod u+x ...は、ユーザーの実行権限を追加するための記号形式です。 RubyのFileUtilschmod関数は、許可として絶対ビットマスクのみをサポートしています。つまり、FileUtils.chmod(0777, ...)しか実行できませんが、FileUtils.chmod('u+x', ...)は機能しません。システムコマンドを明示的に呼び出さずにRubyでchmodのシンボリックモードを複製する

systemコマンドを直接呼び出すことです:system("chmod u+x ...")を直接呼び出すことですが、Rubyドメインにできるだけ多くのシェルを作成することなくコードを保持したいと考えています。あるいは、Fileのオブジェクト、File.statを反復して、既存のビットマスクを取得して個々に変更することもできますが、シンボリックモードはファイルのグロブをサポートします。

もっとエレガントな方法でこれを行う方法があるかどうかは知っていますか?

答えて

2

使用しているRubyのバージョンは何ですか? 1.9.3 docs for FileUtils.chmodを見てください:モードによって表されるビット パターンに

変更(リスト内)という名前のファイルのアクセス権ビット。 modeはシンボリックで絶対的なモードです を使用できます。絶対モードは

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

シンボリックモードである私は、Rubyの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

現在の生産システムはUbuntu Lucidに固執していますが、これはまだ1.8(実際には最新版のOneiricもRuby 1.8です)であり、DebianパッケージはRubyを手動でアップグレードするとうまく動作しません。私はRVMベースの管理システムへの移行を検討していましたが、まだそこにはありません。 –

関連する問題