O programa não usa aspas simples. As aspas simples são usadas para evitar que o shell execute expansões variáveis na string citada. As aspas serão removidas pelo shell antes de chamar o programa.
Nesse caso, as aspas simples não fazem nada, pois a string que eles citam é apenas uma string simples sem expansões para o shell executar (isso é um erro em seu código, você provavelmente queria $outputfile
com aspas duplas) .
Se seus arquivos estiverem no diretório atual (e somente lá), você poderia fazer
for fasta in ./*.fna; do
barrnap --outseq "${fasta%.fna}.rrna" "$fasta"
done
ou, com uma variável intermediária,
for fasta in ./*.fna; do
outfile="${fasta%.fna}.rrna"
barrnap --outseq "$outfile" "$fasta"
done
Aqui, usamos aspas duplas em vez de aspas simples, porque queremos que o shell realize a expansão dentro delas. Também movi o nome do arquivo de entrada para o final da linha de comando na invocação de barrnap
de acordo com o manual .
Se seus arquivos estiverem localizados em qualquer número de subdiretórios no diretório atual, e você precisar usar find
, não faça um loop pela saída de find
, mas deixe find
chamar seu programa:
find . -type f -name '*.fna' -exec sh -c '
for fasta do
barrnap --outseq "${fasta%.fna}.rrna" "$fasta"
done' sh {} +
Aqui, find
age como um gerador de nomes de caminho para o loop de shell.
Relacionados:
Seu código também tem alguns erros de sintaxe, pois as atribuições devem ser feitas sem espaços em torno de =
. Expansões variáveis devem, além disso, ser duplamente citadas.