Достаточно простой способ убить циклы, запущенные интерактивно, - остановить команду (Ctrl-Z), которая должна вывести номер задания, скажем [2]+ Stopped
, которое затем можно убить, используя kill %2
.
Программа не использует одинарные кавычки. Одинарные кавычки используются для того, чтобы оболочка не выполняла раскрытие переменных в строке в кавычках. Кавычки будут удалены оболочкой перед вызовом программы.
В этом случае одинарные кавычки ничего не делают, так как строка, которую они заключают в кавычки, является простой строкой без расширений для выполнения оболочкой (это ошибка в вашем коде, вы, вероятно, хотели $outputfile
с двойным кавычки ).
Если ваши файлы находятся в текущем каталоге (и только там ), вы можете сделать
for fasta in./*.fna; do
barrnap --outseq "${fasta%.fna}.rrna" "$fasta"
done
или, с промежуточной переменной,
for fasta in./*.fna; do
outfile="${fasta%.fna}.rrna"
barrnap --outseq "$outfile" "$fasta"
done
Здесь мы используем двойные кавычки вместо одинарных, потому что мы хотим, чтобы оболочка выполняла раскрытие внутри них. Я также переместил имя входного файла в конец командной строки при вызове barrnap
в соответствии с руководством .
Если ваши файлы расположены в любом количестве подкаталогов в текущем каталоге, и вам нужно использовать find
, то не зацикливайте вывод find
, а пусть find
вызовет вашу программу:
find. -type f -name '*.fna' -exec sh -c '
for fasta do
barrnap --outseq "${fasta%.fna}.rrna" "$fasta"
done' sh {} +
Здесь find
действует как генератор имен путей для цикла оболочки.
Связанные:
В вашем коде также есть пара синтаксических ошибок в том, что присваивания должны выполняться без пробелов вокруг =
. Кроме того, расширения переменных должны заключаться в двойные кавычки.