Tengo un archivo con una lista de nombres de archivos que intento usar como entrada en una herramienta de descarga de archivos específica (sratools), pero mi secuencia de comandos tiene un problema.
#!/bin/bash
input="<path_to_directory>/SRR_Acc_List.txt"
while IFS= read -r line
do
"<path_to_tool>/fastq-dump -O <desired_output_directory/ $line"
echo "Downloading $line file"
done <"$input"
El comando es funcional en una sola entrada y el eco es correcto pero la parte del comando arroja el error
line 6: ./fastq-dump -O ../../DATA_fastQ/ SRR1975008: No such file or directory
¡Agradecería sugerencias sobre dónde me he equivocado!
Respuesta1
Esta línea
"<path_to_tool>/fastq-dump -O <desired_output_directory/ $line"
debiera ser
"<path_to_tool>/fastq-dump" -O "<desired_output_directory/" "$line"
# unquoted spaces ^ ^ they separate words ^
entonces hay cuatro palabras. Su línea original fue citada en su totalidad y se interpretó como una palabra, el nombre de un comando. Dado que su "nombre de comando" comienza con ./
, debe ser un archivo o directorio. Pero no hay ningún archivo o directorio con el nombre literal ./fastq-dump -O ../../DATA_fastQ/ SRR1975008
, de ahí el error.
Cité <path_to_tool>/fastq-dump
y <desired_output_directory/
en caso de que los valores reales contengan espacios y/o cosas así. Por el mensaje de error puedo decir que no es así, pero en general es posible que sí.
Es muy bueno que cites (por ejemplo, aquí done <"$input"
:). El problema fue que usaste un par de comillas donde ciertas cadenas debían tratarse por separado.