在Resque任务中未能识别出Backtick中的文件名的引号,而是在控制台中工作



我有一个重新拉链文件的固定任务。当绝对文件名中没有空格时,此任务非常有效。但是,当名称中有一个空间时,它会失败。我在背景中添加了围绕文件名的引号(请参见下文),但这似乎并没有改变Resque任务。甚至很陌生的是我可以在控制台中运行确切的命令,并且它可以很好地运行。

这是我的代码。在下面的f.filename中='Russell/Artaver-Proto-AIPS/批次1/rbrl-999-er-000001_bag.61440.tar.bz2':

f = JobFile.find(id)
output = `tar xjf "#{File.join( '/', 'storage', f.filename )}" -C /working 2>&1`

在控制台中运行:

2.3.0 :009 > output = `tar xjf "#{File.join( '/', 'storage', f.filename )}" -C /working 2>&1`
 => ""

运行Resque任务后输出的内容:

tar (child): /storage/russell/artificial-proto-aips/Batch: Cannot open: No such file or directoryntar (child): Error is not recoverable: exiting nowntar: Child returned status 2ntar: Error is not recoverable: exiting nown

我必须承认,我对这种行为感到困惑,但是我不想告诉我的用户不要使用目录名称中的空间(如我所愿)。

有什么建议?

虽然发现了问题。Backticks调用/bin/sh,所以我的bash样式命令失败了。更新/bin/sh指向/bin/bash将其修复。

相关内容

最新更新