5

私はRubyに比較的慣れていないので、次のような方法でファイルを開こうとしています。

#! /usr/bin/env ruby
data_file = '~/path/to/file.txt'
file = File.open(data_file, 'r')

ただし、「そのようなファイルまたはディレクトリはありません」というメッセージが表示されます(ファイルはそのディレクトリに存在します)。次のようなコマンドライン引数としてファイルへのパスを指定すると機能します。

#! /usr/bin/env ruby
file = File.open(ARGV[0], 'r')

次に、次のようなコマンドラインから実行します。rubyscript.cgi〜/ path / to / file.txt

それを最初の方法で機能させる方法はありますか?

4

1 に答える 1

14

パスは展開されませんが、コマンド ラインから実行すると展開されます。私はUNIXシステムを信じています。呼び出しを実行する前にパスが展開されます。つまり、次のことを意味します。

ruby file.rb ~/path/to/file

実際に展開される

ruby file.rb /home/user/path/to/file

これを確認するには、ターミナルで次のコマンドを実行します (または、ruby ファイルを作成しp ARGV[0]て実行します)。

echo "p ARGV[0]" | ruby "" ~/path/to/file #/home/user/path/to/file

File.expand_pathを使用~して変更できます/home/user

data_file = '~/path/to/file.txt'
file = File.open(File.expand_path(data_file), 'r')
于 2012-05-01T20:53:52.417 に答える