Ich habe diese Situation:
./
./myscript.sh
./arguments.txt
./test.sh
Im Inneren myscript.sh
muss ich die Datei ausführen und die test.sh
darin enthaltenen Argumente an sie übergeben arguments.txt
.
myscript.sh ist:
arguments=$(cat arguments.txt)
source test.sh $arguments
Dies funktioniert gut, wenn argements.txt höchstens ein Argument enthält:
firstargument
Die Substitution ist:
++ source test.sh 'firstargument'
Das Problem liegt jedoch bei zwei oder mehr Argumenten. Es macht das:
++ source test.sh 'firstargument secondargument'
Außerdem weiß ich nicht im Voraus, wie viele Argumente darin enthalten sind arguments.txt
. Es kann null oder mehr geben.
bash
shell-script
scripting
Federico Ponzi
quelle
quelle
source test.sh "$arguments"
mit Zitaten? Das wäre eine Erklärung für Ihre Beschreibungsource test.sh "$arguments"
undsource test.sh $arguments
beide führen zusource test.sh 'firstargument secondargument'
.Antworten:
Angenommen, jede Zeile von
arguments.txt
stellt ein separates Argument dar. Mit Bash 4 können Siearguments.txt
mithilfe vonmapfile
(jede Zeile aus der Datei wird nacheinander als Array-Element eingefügt) in ein Array einlesen und das Array dann an den Befehl übergebenDer Vorteil ist, dass das Aufteilen auf in Linien eingebetteten Räumen vermieden wird
Mit niedrigeren Versionen von Bash
quelle
Sie können dies mit tun
awk
. Zum Beispiel:Bearbeiten Sie nach dem Lesen Ihres Kommentars:
quelle
Ich würde vorschlagen, eine Funktion mit einer while / do-Schleife zu verwenden, um die Argumentdatei zu durchlaufen.
Erstellen Sie einfach eine Datei mit der Funktion und rufen Sie dann die Datei test.sh innerhalb der Funktion auf, um die in der Datei argument.txt enthaltenen Argumente zu durchlaufen.
quelle