Pasar cadena a script

Tengo un guion download, que toma una cadena y verifica si un archivo tiene el nombre de archivo de la cadena. Si no es así, lo descarga. Todos los nombres de archivo están en un archivo.

Este comando no funciona:

cat filenames | ./download

Fuente de descarga:

filename=$1
if [ ! -f $1 ];
then
        wget -q http://www.example.com/nature/life/${filename}.rdf
fi

Ejemplo de archivo de nombre de archivo:

file1
file2
file3
file4

¿Cómo paso la salida del comando del gato al script de descarga?

preguntado el 12 de abril de 13 a las 19:04

¿Quieres ./download filename1 filename2 Etc.-

¿Y cuál es la pregunta? -

2 Respuestas

En tu guion $1 es el argumento posicional en la línea de comando. ./download somefile funcionaría, pero cat filename | ./download transmite los datos a la descarga, que ignoras.

Deberías leer el guía avanzada de secuencias de comandos de bash, que le dará una buena base sobre cómo funciona el scripting de bash. Para solucionar esto, cambie su comando a:

cat filename | xargs -n 1 ./download

Esto se ejecutará ./download para cada nombre de archivo en su lista. Sin embargo, los nombres de archivo pueden tener espacios u otros caracteres especiales, lo que rompería su secuencia de comandos. Debe buscar formas alternativas de hacer esto, para evitar estos problemas.

Específicamente, utilice un mientras bucle para leer su archivo. Esto escapa adecuadamente a sus nombres de archivo en cada línea, si se ingresaron en el archivo correctamente. De esa manera, evita los problemas que tendría cat con nombres de archivo como: fi/\nle.

Respondido 12 Abr '13, 20:04

Puede pasar un nombre de archivo a un archivo que contiene nombres de archivo para su secuencia de comandos:

./download filenames

Y luego recorra los nombres de los archivos desde el nombre del archivo en $1:

$!/bin/bash
# Do sanity check

fname=$1

for f in $(<$fname); do
   if [ ! -f "$f.rdf" ]; then
     wget -q http://www.example.com/nature/life/${f}.rdf
   fi
done

respondido 27 nov., 16:13

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.