我有一个resque任务来解压缩文件。当绝对文件名中没有空格时,此任务可以正常工作;但是,当名称中有空格时,它会失败。我在反引号中添加了文件名周围的引号(见下文),但这似乎没有对resque任务产生影响。更奇怪的是,我可以在控制台中运行确切的命令,并且它完美地运行。
这是我的代码。在下面f.filename ='russell / artificial-proto-aips / Batch 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 directory\ntar (child): Error is not recoverable: exiting now\ntar: Child returned status 2\ntar: Error is not recoverable: exiting now\n
我必须承认,我对此行为感到非常困惑,但我不想告诉我的用户不要在目录名中使用空格(尽可能多)。
有什么建议吗?
答案 0 :(得分:1)
虽然想出了问题。反引号调用/bin/sh
,所以我的bash样式命令失败了。更新/bin/sh
以指向/bin/bash
将其修正。