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')

然后从命令行运行,如:ruby script.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 回答