ファイルからbashスクリプトにパラメータを渡す

ファイルからbashスクリプトにパラメータを渡す

4つのファイルがあります。

./
./myscript.sh
./arguments.txt
./test.sh

内部でmyscript.shファイルを実行しtest.sh、ファイルに含まれるパラメータを渡す必要がありますarguments.txt

myscript.sh例:

arguments=$(cat arguments.txt)
source test.sh $arguments

これは非常にうまく機能しますarguments.txt最大1つを含む場合ディスカッション:

firstargument 

代替案は次のとおりです。

++ source test.sh 'firstargument'

ただし、問題は2つ以上のパラメータにあります。これは次のことを行います。

++ 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}'

関連情報