我对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
任何想法如何让它以第一种方式运作?
答案 0 :(得分:13)
路径没有扩展,但是当你通过命令行运行它时它会发生。我相信在unix系统中,路径在运行调用之前被扩展,意思是:
ruby file.rb ~/path/to/file
实际上已扩展为
ruby file.rb /home/user/path/to/file
您可以通过在终端中运行以下内容来验证这一点(或使用p ARGV[0]
创建一个ruby文件并运行它):
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')