bash脚本的奇怪行为
这是一个片段:
var=`ls | shuf | head -2 | xargs cat | sed -e 's/(.)/1n/g' | shuf | tr -d 'n'` 这将从当前目录中选择两个随机文件,组合它们的内容,将它们进行混洗,并将结果分配给var.这大部分时间工作正常,但是在一千次的情况下,只有ls的输出被绑定到var(这不仅仅是输出,参见EDIT II).什么可以解释? 一些更有潜力的相关事实: >该目录至少包含两个文件 编辑:我自己运行了这个代码段,几千次,没有错误.然后我尝试运行它与整个脚本的各种其他部分.这是一个产生错误的配置: cd dir_with_text_files var=`ls | shuf | head -2 | xargs cat | sed -e 's/(.)/1n/g' | shuf | tr -d 'n'` cd .. cds之间有数百行脚本,但这是重现错误的最小配置.请注意,异常输出绑定到var当前目录的输出,而不是dir_with_text_files. 编辑二:我一直在看更多的输出. ls输出不会单独出现,它连同两个洗牌文件(在其内容之间,或之前或之前,完整).但它变得更好了让我设置舞台来谈谈特定的目录. [~/projects/upload] ls -1 checked // dir lines // dir,the files to shuffle are here pages // also dir proxycheck singlepost uploader indexrefresh t tester 到目前为止,我已经看到ls的输出是从上传的,但是现在我看到了ls * / *的输出(也从上传运行).它的形式是“someMangledText ls moreMangledText ls * / * finalBatchOfText”.是否有可能无序地产生的序列ls被执行?
这里也没有问题.
我也会重写上面这个: sed 's:(.):1n:g' < <(shuf -e * | head -2 | xargs cat) | shuf | tr -d 'n' 不要使用ls来列出目录的内容,请使用*. set -e set -o pipefail 并运行这样的脚本: /bin/bash -x /path/to/script 并检查输出. set -x ...code that may have problems... set +x 所以输出集中在代码的那部分.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |