回答:
$HOME
は単なる慣習です。実際、のドキュメントを見るFile.expand_path
と、チルダは正しく解釈されますが、これは関数自体の機能であり、基盤となるシステムに固有のものではありません。また、環境変数を正しく設定するFile.expand_path
必要があり$HOME
ます。それは私たちに可能な代替案をもたらします...これを試して:
open(ENV['HOME']+'/some_file')
私はそれが十分に滑らかであることを望みます。個人的には、環境変数を使用する方が、を使用するよりも意味的に明確だと思いますexpand_path
。
File.join(ENV['HOME'], '/some_file')
どちらの場合にも機能させるために使用します。
これがRuby 1.9.3より前に利用可能であったかどうかはわかりませんが、最もエレガントな解決策はDir.home
コアの一部であるものを使用することです。
open("#{Dir.home}/some_file")
$HOME
環境変数が正しく設定されていることに依存するのではなく、開発に共有ネットワークコンピューターを使用するときに面倒になる可能性がありますが、これを使用してRubyからこれを取得できます。
require 'etc'
open ("#{Etc.getpwuid.dir}/some_file")
これにより、現在ログインしているユーザーが識別され、$HOME
設定されているグローバル環境変数に依存するのではなく、ホームディレクトリが取得されます。これは、私が考慮している上記の代替ソリューションです。
チルドの問題を発見し、チルドをabsolute_path
通常のキャラクターとして扱うように追加するパッチを作成しました。
ファイルのドキュメントから:
absolute_path(file_name [, dir_string] ) → abs_file_name
パス名を絶対パス名に変換します。相対パスは、dir_stringが指定されていない限り、プロセスの現在の作業ディレクトリから参照されます。この場合、dir_stringは開始点として使用されます。指定されたパス名が「〜」で始まる場合は展開されず、通常のディレクトリ名として扱われます。
open(ENV['HOME']+'some_file')