У меня такая ситуация:
./
./myscript.sh
./arguments.txt
./test.sh
Внутри myscript.sh
я должен запустить файл test.sh
, передав ему аргументы, содержащиеся внутри arguments.txt
.
myscript.sh это:
arguments=$(cat arguments.txt)
source test.sh $arguments
Это хорошо работает, если arguments.txt содержит не более одного аргумента:
firstargument
Подстановка:
++ source test.sh 'firstargument'
Но проблема в двух или более аргументах. Это делает это:
++ source test.sh 'firstargument secondargument'
Кроме того, я не знаю заранее количество аргументов внутри arguments.txt
. Там может быть ноль или более.
bash
shell-script
scripting
Федерико Понци
источник
источник
source test.sh "$arguments"
с кавычками? Это было бы одно объяснение для вашего описанияsource test.sh "$arguments"
и то иsource test.sh $arguments
другоеsource test.sh 'firstargument secondargument'
.Ответы:
Предполагая, что каждая строка
arguments.txt
представляет отдельный аргумент, с помощью bash 4 вы можете прочитатьarguments.txt
в массив, используяmapfile
(каждая строка из файла входит как элемент массива, последовательно), а затем передать массив в командуПреимущество состоит в том, что разбивка на пробелы, встроенные в линии, исключается
С более низкими версиями Bash
источник
Вы можете сделать это с
awk
. Например:Изменить после прочтения вашего комментария:
источник
Я бы предложил использовать функцию с циклом while / do для итерации файла аргументов.
Просто создайте файл, содержащий функцию, а затем вызовите файл test.sh внутри функции, чтобы перебрать аргументы, содержащиеся в файле arguments.txt.
источник