1

ファイルから空白行を引数として別のスクリプト内の bash スクリプトに渡すにはどうすればよいですか?

詳細はこちら。script bar は、inputfile から行を読み取り、それらを配列に格納し、配列要素をオプションや引数としてスクリプト foo に渡します。入力ファイルは次のようになります。

-l file1
dirA

-c
-lc file2
file2

-cd file3
file4

(等) ここで何が起こるかです。スクリプト バーはファイルを 1 行ずつ読み取り、空白行に 2 つの空の要素を含めて、適切に配列を作成します。(配列の各要素をエコーすることでこれを確認しました。) しかし、bar がループ内で配列を走査し、各要素をスクリプト foo に渡すと、2 つの空の要素はスキップされます。そのため、スクリプト foo をゼロの引数とゼロのオプションで呼び出す必要がある場合は、単純に発生しません。スクリプト foo の他のすべての実行は、期待どおりに実行されます。

おそらく問題は、入力ファイルに改行文字しかないため、配列内のそれらの要素が空の文字列を含むのではなく、null になっていることだと思いました。そこで、入力ファイルの「空白」行にスペースを入れてみましたが、違いがあるかどうかを確認しましたが、結果は同じでした。

入力ファイルに空白行がある場合、または少なくとも空白文字だけの行がある場合に、bar が引数やオプションなしで foo を適切に呼び出すにはどうすればよいですか?

質問が明確であることを願っています。ご協力いただきありがとうございます!

編集。誰かがスクリプトを投稿することを提案したので、関連する部分は次のとおりです。

# read in input lines from file, add to array
index=0
while read line 
do
tests[index]=$line
(( index++ ))
done < $@

# run tests
for stuff in ${tests[@]}
do  
foo ${stuff} > /dev/null 2>&1
    # capture and process the exit status of each foo run
done

IFS を設定していないかのように見えます。これは私のスクリプトの一部にすぎないためです。問題がどこかにあると確信しています。配列は空白行を含む 2 つの要素で適切に構築されますが、それらの要素はfor ... inループ内でスキップされます。

4

1 に答える 1

1

必要に応じて二重引用符を追加すると、機能するはずです。(行を反復する方法を示していないため、推測しているだけです)。

#! /bin/bash
switches=('-n a'
    '-e "b\nc"'
    ''
    x)
for s in "${switches[@]}" ; do
    echo $s
done
于 2012-05-18T00:33:30.083 に答える