在提交的一小部分工作中找不到文件

时间:2013-08-15 13:33:53

标签: bash cluster-computing rhel5 pbs

我正在尝试在使用Lustre文件系统的RHEL5群集上运行一大组批处理作业。大约1%的工作我得到了一个奇怪的错误:他们无法找到他们用于转向的文本文件。重现错误的脚本如下所示:

#!/usr/bin/env bash

#PBS -t 1-18792
#PBS -l mem=4gb,walltime=30:00
#PBS -l nodes=1:ppn=1
#PBS -q hep
#PBS -o output/fit/out.txt
#PBS -e output/fit/error.txt

cd $PBS_O_WORKDIR
mkdir -p output/fit
echo 'submitted from: ' $PBS_O_WORKDIR 

files=($(ls ./*.txt | sort)) # <-- NOTE THIS LINE

cat batch/fits/fit-paths.txt

对于一小部分作业,错误流输出将显示:

cat: batch/fits/fit-paths.txt: No such file or directory

很奇怪,但它变得陌生。


当我将files=($(ls ./*.txt | sort))行更改为

files=($(ls batch/fits/*.txt | sort))

作业运行没有错误!毋庸置疑,这远非令人满意:我宁愿不让我的工作依赖于黑魔法(虽然黑魔法 魔法)。

知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试替换

files=($(ls ./*.txt | sort))

files=(./*.txt)

通常情况下,shell会自动对glob结果进行排序,而且 - 与解析ls(1)输出相反,后者永远不应该在可移植的shell脚本中完成 - 正确处理特殊字符的引用。

虽然这只是一个问题,但如果您的文件中包含某些shell元字符。这里的候选人是空格,制表符,换行符和可能的回车符。