1. ホーム
  2. ruby

[解決済み] ホームディレクトリから相対的にファイルを開く方法

2023-02-04 03:54:48

質問

以下は Errno::ENOENT: No such file or directory で、ファイルが存在しても失敗します。

open('~/some_file')

しかし、こんなこともできるのです。

open(File.expand_path('~/some_file'))

2つ質問があります。

  1. なぜ open はチルダがホームディレクトリを指していると処理するのでしょうか?
  2. よりももっと簡単な方法はありますか? File.expand_path ?

どのように解決するのですか?

  1. シェル (bash、zsh など) はワイルドカードの展開を担当します。したがって、最初の例ではシェルがないため展開されません。チルダを使用して $HOME を指すためにチルダを使うのは単なる慣習に過ぎません。 File.expand_path のドキュメントを見ると、チルダを正しく解釈していますが、これは関数自体の機能であり、基礎となるシステムに固有のものではありません; また File.expand_path$HOME 環境変数が正しく設定されている必要があります。そこで、考えられる代替案として...
  2. これを試してください。

    open(ENV['HOME']+'/some_file')
    
    

十分に巧妙であることを望みます。個人的には、環境変数を使う方が expand_path .