Tengo esta situación:
./
./myscript.sh
./arguments.txt
./test.sh
Dentro myscript.sh
, tengo que ejecutar el archivo test.sh
, pasándole los argumentos contenidos dentro arguments.txt
.
myscript.sh es:
arguments=$(cat arguments.txt)
source test.sh $arguments
Esto funciona bien si if argumentos.txt contiene como máximo un argumento:
firstargument
La sustitución es:
++ source test.sh 'firstargument'
Pero el problema es con dos o más argumentos. Hace esto:
++ source test.sh 'firstargument secondargument'
Además, no sé de antemano la cantidad de argumentos que contiene arguments.txt
. Puede haber cero o más.
bash
shell-script
scripting
Federico Ponzi
fuente
fuente
source test.sh "$arguments"
con citas? Esa sería una explicación para su descripciónsource test.sh "$arguments"
ysource test.sh $arguments
ambos resultan ensource test.sh 'firstargument secondargument'
.Respuestas:
Suponiendo que cada línea de
arguments.txt
representa un argumento separado, con bash 4 puede leerarguments.txt
en una matriz usandomapfile
(cada línea del archivo entra como un elemento de la matriz, en secuencia) y luego pasar la matriz al comandoLa ventaja es que se evita la división en espacios incrustados dentro de las líneas
Con versiones inferiores de bash
fuente
Puedes hacer esto con
awk
. Por ejemplo:Edite después de leer su comentario:
fuente
Sugeriría usar una función con un ciclo while / do para recorrer el archivo de argumentos.
Simplemente cree un archivo que contenga la función y luego llame al archivo test.sh dentro de la función para iterar a través de los argumentos contenidos en el archivo argumentos.txt.
fuente