小ネタです.採点対象ファイルの集計プログラムに,馬鹿馬鹿しいバグを入れてしまっていて,採点作業のやり直しを余儀なくされました.
問題のコードは,こんなの:
command = "cp #{filename_from} #{filename_to}" puts command system command
これでは,ファイル名(filename_from,filename_toの値)の中に空白文字があると,おかしな動作になります.例えば,filename_from = "filename from.txt", filename_to = "filename.txt" なんかだったりすると,
cp filename from.txt filename.txt
と出力し,そのまま実行します.filenameというファイル名は実在しないので,エラーとなっていたのでした.
commandの代入のところで,クォートを入れるのは,さらなるバグの温床になりそうだったので,標準添付ライブラリのfileutils*1を使うことにしました.
require "fileutils"
FileUtils.cp(filename_from, filename_to, :verbose => true)
上のように書いて,解決しました.
*1:http://miyamae.github.io/rubydoc-ja/2.2.0/#!/library/fileutils.html.全部小文字がライブラリ名で,FileUtilsはモジュール名とのこと.