>我在尝试通过文件列表执行命令时收到错误模糊的重定向。我已经测试过该命令在逐个文件执行循环文件时效果很好。
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
谁能给我一盏灯?
谢谢!
for i in 'cat authomatic_test.txt'
# i='cat authomatic_test.txt'
... > /home/hpz440/Documents//example/output/$i'_PASS'.vcf
变量i
中有一个空格。在重定向的目标中允许使用空格进行变量扩展,但范围不明确 - 空格应该是文件名的一部分,还是应该将令牌拆分为文件名和参数?Bash 打印ambiguous redirect
错误,因为它无法解析目标。外壳扩展后,它扩展到:
... > /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
记住正确理解和使用引号。