尝试通过文件列表执行命令时,我得到错误的歧义重定向。我已经测试了该命令在逐个循环执行文件时可以很好地工作。
for i in "file1.vcf" "file2.vcf"
do
grep -e "#" -e "PASS" /home/hpz440/Documents/P/example/input/$i > /home/hpz440/Documents//example/output/$i'_PASS'.vcf
echo $i
done
现在,由于我有成千上万个文件输入,因此我想将所有文件的路径都放在列表中。
for i in 'cat authomatic_test.txt'
do
grep -e "#" -e "PASS" /home/hpz440/Documents/P/example/input/$i > /home/hpz440/Documents//example/output/$i'_PASS'.vcf
echo $i
done
但是我收到此错误:
bash:/home/hpz440/Documents/example/output/$i'_PASS'.vcf:模糊重定向
我的列表是这样的txt文件:
hpz440@yasminlima:~/Documents//example/input$ cat authomatic_test.txt
/home/hpz440/Documents/example/input/file1.vcf
/home/hpz440/Documents/example/input/file2.vcf
有人可以给我个灯吗?
谢谢!
答案 0 :(得分:1)
for i in 'cat authomatic_test.txt'
# i='cat authomatic_test.txt'
... > /home/hpz440/Documents//example/output/$i'_PASS'.vcf
变量i
中有一个空格。重定向的目标位置允许使用带空格的变量扩展,但是模棱两可-空格应该是文件名的一部分,还是应该将令牌拆分为文件名和参数? Bash打印ambiguous redirect
错误,因为它无法解析目标。 Shell扩展后,它扩展为:
... > /home/hpz440/Documents//example/output/cat authomatic_test.txt'_PASS'.vcf
您想要的是什么
while IFS= read -r line; do
grep -e "#" -e "PASS" /home/hpz440/Documents/P/example/input/"$i" > /home/hpz440/Documents//example/output/"$i"_PASS.vcf
done < authomatic_test.txt
请记住要正确理解和使用quotes。