네 개의 파일이 있습니다.
./
./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
. 0개 이상이 있을 수 있습니다.
답변1
각 줄이 arguments.txt
별도의 인수를 나타낸다고 가정하면 bash 4에서는 arguments.txt
(파일의 각 줄이 배열 요소로 순서대로 지정됨)을 사용하여 배열에서 읽을 수 mapfile
있으며 배열을 명령에 전달할 수 있습니다.
mapfile -t <arguments.txt
source test.sh "${MAPFILE[@]}"
장점은 포함된 행 내에서 공백이 분할되지 않는다는 것입니다.
더 낮은 버전의 bash를 사용하세요
IFS=$'\n' read -ra arr -d '' <arguments.txt
source test.sh "${arr[@]}"
답변2
매개변수 파일을 반복하려면 while
/ 루프가 있는 함수를 사용하는 것이 좋습니다 .do
함수가 포함된 파일을 만든 다음 test.sh
함수 내에서 파일을 호출하여 arguments.txt
파일에 포함된 매개변수를 반복하면 됩니다.
#!/bin/sh
# Calling script
function_name ()
{
while read line;
do
. ~/path_to/test.sh $line
do_something_commands # print to screen or file or do nothing
done < ~/path_to_/argument_file.txt
}
function_name # Call the function
do_something_commands # print to screen or file or do nothing
답변3
를 사용하여 이 작업을 수행할 수 있습니다 awk
. 예를 들어:
arguments=`awk '{a = $1 " " a} END {print a}' arguments.txt`
귀하의 의견을 읽은 후 편집하십시오.
arguments=`awk '{i = 0; while(i<=NF){i++; a = a " "$i}} END {print a}'