我需要在Bash脚本(analysis-run.sh)中使用循环来运行许多查询。由于我有很多疑问,我无法手动运行它们,所以我需要一种方法来自动化它们。到目前为止,我创建了一个包含所有查询的文件inputs.txt
,并在bash脚本文件的末尾添加了以下内容:
while read f ; do
./analysis-run.sh $f
done < imputs.txt
使用该循环,analyze-run只会反复运行inputs.txt
的第一个查询。我真的很陌生,所以任何帮助都会受到赞赏。
imputs.txt的内容是:
骨
肌肉
血液
唾液
依旧......
analysis-run.sh的内容是:
查询= $ 1
组= $ 16
如果[$ group =&#34; clean&#34; ]。然后
cluster=A
否则
cluster=B
网络连接
adamo-obtain_bundance.py - 查询$ query -ref combined_ $ cluster。$ group.align -splits 1 -group $ group
adamo-obtain_structure.py -i $ query.combined_ $ query $ group.csv -o $ query。$ group -cutoff 0.5 -group $ group
答案 0 :(得分:0)
在Bash中使用循环有时可以工作,但它会带来危险。
使用xargs
通常是最干净,最强大的方法......
<inputs.txt xargs --max-args=1 do_something
要执行的命令可以作为Bash函数提供......
function do_something
{
echo value=${1}
}
虽然采用这种方法时对xargs
的调用更为复杂。请参阅:Calling functions with xargs within a bash script
xargs
xargs
获取一个参数列表(通常是文件名),它们作为输入文件或流提供,并将这些参数放在命令行中,用于另一个指定的命令或函数。如果该命令可以处理多个输入参数,则可以删除--max-args=1
选项。
答案 1 :(得分:0)
使用该循环,analysis-run只是一遍又一遍地运行inputs.txt的第一个查询。
问题(可能)是您需要引用$f
:
while read -r f ; do
./analysis-run.sh "$f"
done < samples.txt
如果没有引号,从samples.txt
读取的行将受到分词和全局扩展的影响。
阅读http://tldp.org/LDP/abs/html/quotingvar.html
然后通过ShellCheck
运行您的脚本