Berikut ini gagal dengan Errno::ENOENT: No such file or directory
, bahkan jika file tersebut ada:
open('~/some_file')
Namun, saya bisa melakukan ini:
open(File.expand_path('~/some_file'))
Saya punya dua pertanyaan:
- Mengapa tidak
open
memproses tilde sebagai menunjuk ke direktori home? - Apakah ada cara yang lebih licin dari
File.expand_path
?
open(ENV['HOME']+'some_file')
File.join(ENV['HOME'], '/some_file')
untuk membuatnya berfungsi dalam kedua kasus.Tidak yakin apakah ini tersedia sebelum Ruby 1.9.3 tetapi saya menemukan bahwa solusi paling elegan adalah menggunakan
Dir.home
yang merupakan bagian dari inti.sumber
Daripada mengandalkan
$HOME
variabel lingkungan yang disetel dengan benar, yang bisa merepotkan saat Anda menggunakan komputer jaringan bersama untuk pengembangan, Anda bisa mendapatkannya dari Ruby menggunakan:Saya percaya ini mengidentifikasi pengguna yang masuk saat ini dan mendapatkan direktori home mereka daripada mengandalkan
$HOME
variabel lingkungan global yang disetel. Ini adalah solusi alternatif menurut saya di atas.sumber
Saya menemukan masalah tilde, dan tambalan dibuat untuk menambahkan
absolute_path
yang memperlakukan tilde sebagai karakter biasa.Dari dokumentasi File:
sumber