这是一个片段:
var=`ls | shuf | head -2 | xargs cat | sed -e 's/\(.\)/\1\n/g' | shuf | tr -d '\n'`
Run Code Online (Sandbox Code Playgroud)
这将从当前目录中选择两个随机文件,组合它们的内容,将它们混洗,并将结果分配给var.这大部分时间都可以正常工作,但是在一千个案例中只有一次,而只是输出ls被绑定到var(它不仅仅是输出,参见编辑II).可能是什么解释?
一些更可能相关的事实:
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)Linux 2.6.35-28-generic-pae #50-Ubuntu编辑:我自己运行了几千次没有错误的代码片段.然后我尝试用整个脚本的其他各个部分运行它.这是一个产生错误的配置:
cd dir_with_text_files
var=`ls | shuf | head -2 | xargs cat | sed -e 's/\(.\)/\1\n/g' | shuf | tr -d '\n'`
cd ..
Run Code Online (Sandbox Code Playgroud)
cds 之间有几百行脚本,但这是重现错误的最小配置.请注意,异常输出绑定到var当前目录的输出,而不是dir_with_text_files.
编辑II:我一直在更详细地研究输出.该ls输出不会单独出现,它有两个洗牌文件(它们的内容之间,或之后或之前,完整的)一起的.但它变得更好; 让我建立一个讨论特定目录的舞台.
[~/projects/upload] ls -1
checked // dir
lines // dir, the files to shuffle are here
pages // also dir
proxycheck
singlepost
uploader
indexrefresh
t
tester
Run Code Online (Sandbox Code Playgroud)
到目前为止,我见过的输出ls从跑upload,但现在我看到的输出ls */*(也跑了upload).它的形式是"someMangledText lsmoreMangledText ls */*finalBatchOfText".ls毫无疑问,生成的序列是否可能以某种方式执行?
根据您所说的失败率,并考虑到上面海报所执行的其他测试的成功,这听起来像是一个可能由偶尔的目录更改失败引起的问题。您在此脚本中访问的目录是偶然从远程计算机安装的吗?如果是这样,这可能只是一个与网络相关的小型临时故障,未得到正确处理。(只是猜测。)
| 归档时间: |
|
| 查看次数: |
735 次 |
| 最近记录: |