J'ai cette situation:
./
./myscript.sh
./arguments.txt
./test.sh
À l'intérieur myscript.sh
, je dois exécuter le fichier test.sh
, en lui passant les arguments contenus à l'intérieur arguments.txt
.
myscript.sh est:
arguments=$(cat arguments.txt)
source test.sh $arguments
Cela fonctionne bien si if arguments.txt contient au plus un argument:
firstargument
La substitution est:
++ source test.sh 'firstargument'
Mais le problème vient de deux ou plusieurs arguments. Il fait ceci:
++ source test.sh 'firstargument secondargument'
De plus, je ne connais pas à l'avance le nombre d'arguments à l'intérieur arguments.txt
. Il peut y en avoir zéro ou plus.
bash
shell-script
scripting
Federico Ponzi
la source
la source
source test.sh "$arguments"
d' écrire avec des citations? Ce serait une explication pour votre descriptionsource test.sh "$arguments"
et lessource test.sh $arguments
deux aboutissentsource test.sh 'firstargument secondargument'
.Réponses:
En supposant que chaque ligne de
arguments.txt
représente un argument distinct, avec bash 4, vous pouvez lirearguments.txt
dans un tableau à l'aide demapfile
(chaque ligne du fichier entre en tant qu'élément de tableau, dans l'ordre), puis passer le tableau à la commandeL'avantage est que le fractionnement sur des espaces intégrés à l'intérieur des lignes est évité
Avec les versions inférieures de bash
la source
Vous pouvez le faire avec
awk
. Par exemple:Modifiez après avoir lu votre commentaire:
la source
Je suggérerais d'utiliser une fonction avec une boucle while / do pour parcourir le fichier d'arguments.
Créez simplement un fichier contenant la fonction, puis appelez le fichier test.sh dans la fonction pour parcourir les arguments contenus dans le fichier arguments.txt.
la source