Я пытаюсь написать сценарий, который будет проходить через все каталоги в каталоге, где он будет запрашивать определенную последовательность в локальной базе данных Blast.Я запустил поиск BLAST без цикла для bash и использовал цикл for для создания баз данных.Я перепробовал все, что предлагали другие, имеющие эту проблему (где применимо), но безрезультатно.Я ничего не копирую и не вставляю, я перепечатал скрипт и искал глупые ошибки (которых я делаю много).Может я просто этого не вижу?В любом случае вот код:
SRV01:~$ for d in ~/data/Shen_transcriptomes/transcriptomes/*/; do tblastn -query ~/data/chitin_binding_protein/cbp_Tectaria_macrodonta.fa -db "$d"*BLASTdb* -out "$(basename "$d")".out; done
Когда я запускаю то же самое с: echo "$d"*BLASTdb*
, он возвращает правильные файлы.Таким образом, цикл for работает, но приведенный выше скрипт возвращает:
Error: Too many positional arguments (1), the offending value: /home/dwickell/data/Shen_transcriptomes/transcriptomes/Acrostichum_aureum_RS90/RS_90_BLASTdb.nin
для каждого файла BLASTdb в каталоге.
-edit-
Так что это работает, но я недостаточно разбираюсь в bash, чтобы понять, почему:
SRV01:~/data$ for d in /home/dwickell/data/Shen_transcriptome/transcriptomes/*/*.nin; do
name=$(echo "$d" | cut -f 1 -d '.')
blastn -query ./chitin_binding_protein/cbp_Tectaria_macrodonta.fa -db "$name" -outfmt 6 -out RS_103_tblastn.out; done