File.open('~/newfile.txt', 'a+') do |f|
f << "hi..\n"
end
我有一个像这样的cron标签
* * * * * bash -lc 'ruby ~/scri.rb' >> /var/log/syslog
当我检查/ var / log / syslog中的日志时,我看到这样的条目
Sep 8 14:49:01 user1acer CRON[26063]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep 8 14:50:01 user1acer CRON[27502]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep 8 14:51:01 user1acer CRON[29006]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep 8 14:52:01 user1acer CRON[30425]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep 8 14:53:01 user1acer CRON[31846]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
但是当我检查newfile.txt文件时,我什么都没看到。
我在这里错过了什么吗?
答案 0 :(得分:2)
实际上,这与cron无关。 ~
是shell的一个特性,Ruby不知道它是什么。只有Ruby中的一些方法处理~
,例如File::expand_path
。因此,Ruby正在尝试在当前工作目录中的名为newfile.txt
的目录中打开名为~
的文件。自己尝试一下:在主目录中创建一个名为~
的空目录,果然,1分钟后,您应该找到一个名为newfile.txt
的新文件,其中包含hi..
个内容
有几种方法可以解决这个问题,我将把它留给你使用哪一个:
File.open(File.expand_path('~/newfile.txt'), 'a') do |f| end
File.open(File.join(Dir.home, 'newfile.txt'), 'a') do |f| end
[注意:如果您只想附加到文件末尾,不要四处移动或阅读,a
就足够了,您不需要a+
。]
请参阅File::expand_path
的文档(粗体强调我的):
expand_path(file_name [, dir_string] )
→abs_file_name
将路径名转换为绝对路径名。除非给出
dir_string
,否则从进程的当前工作目录引用相对路径,在这种情况下,它将用作起始点。 给定的路径名可能以“〜”开头,后者会扩展到进程所有者的主目录(必须正确设置环境变量HOME
)。 “ ~user ”扩展到指定用户的主目录。