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