파일에서 bash 스크립트로 매개변수 전달

파일에서 bash 스크립트로 매개변수 전달

네 개의 파일이 있습니다.

./
./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}'

관련 정보