Eu tenho essa situação:
./
./myscript.sh
./arguments.txt
./test.sh
Por dentro myscript.sh
, tenho que executar o arquivo test.sh
, passando para ele os argumentos contidos nele arguments.txt
.
myscript.sh é:
arguments=$(cat arguments.txt)
source test.sh $arguments
Isso funciona bem se if.txt contiver no máximo um argumento:
firstargument
A substituição é:
++ source test.sh 'firstargument'
Mas o problema está em dois ou mais argumentos. Faz o seguinte:
++ source test.sh 'firstargument secondargument'
Além disso, não sei de antemão o número de argumentos internos arguments.txt
. Pode haver zero ou mais.
bash
shell-script
scripting
Federico Ponzi
fonte
fonte
source test.sh "$arguments"
com aspas? Isso seria uma explicação para sua descriçãosource test.sh "$arguments"
esource test.sh $arguments
ambos resultam emsource test.sh 'firstargument secondargument'
.Respostas:
Assumindo que cada linha de
arguments.txt
representa um argumento separado, com o bash 4 você pode lerarguments.txt
em uma matriz usandomapfile
(cada linha do arquivo entra como um elemento da matriz, em sequência) e depois passa a matriz para o comandoA vantagem é que é evitada a divisão em espaços incorporados nas linhas
Com versões inferiores do bash
fonte
Você pode fazer isso com
awk
. Por exemplo:Edite depois de ler seu comentário:
fonte
Eu sugeriria o uso de uma função com um loop while / do para percorrer o arquivo de argumento.
Basta criar um arquivo contendo a função the e, em seguida, chame o arquivo test.sh na função para iterar pelos argumentos contidos no arquivo argumentos.txt.
fonte