私はbashを実行しています。
mybinary
対話型ユーザー入力を許可するバイナリがあるとします。mybinary
ユーザーが入力しq
て押すまでEnter(「終了」を意味する)、出席者名が入力として使用されるとしますq
。<<EOF
/ surrounding the inputを使用して、bashスクリプトで入力プロセスを自動化できますEOF
。たとえば、配列に事前定義されたユーザー入力を入力したいとしますmyarray
。私はできます:
#!/bin/bash
myarray=("Alice" "Bob" "Charlie" "q") # q quits the binary
mybinary -f inputfile.txt -o outputfile.txt<<EOF
${myarray[0]}
${myarray[1]}
${myarray[2]}
${myarray[3]}
EOF
上記をテストしましたが、うまくいきます。ただし、何百もの(文字列)要素がある場合、${myarray[X]}
各インデックスを入力するのは難しい作業です。myarray
myarray
上記のbashスクリプトを繰り返し変更するにはどうすればよいですかmyarray
?
for
、do
およびdone
部分が入力として扱われるため、以下は機能しませんmybinary
。
#!/bin/bash
myarray=("Alice" "Bob" "Charlie" "q") # q quits the binary
mybinary -f inputfile.txt -o outputfile.txt<<EOF
for element in "${myarray[@]}"
do
${myarray[0]}
${myarray[1]}
${myarray[2]}
${myarray[3]}
done
EOF
さらに、単にfor
ループを配置することもできませんについてmybinary
何度も電話したくないので電話してくださいmybinary
。それでは、配列の要素を入力として使用するために配列を繰り返すにはどうすればよいですかmybinary
?
ベストアンサー1
printf
配列の各項目の後に改行文字を追加できます。
myarray=("Alice" "Bob" "Charlie" "q")
mybinary -f inputfile.txt -o outputfile.txt<<EOF
$(printf '%s\n' "${myarray[@]}")
EOF
didal24とSteeldriverが指摘したように、ここで説明したようにパイプを代わりに使用することもできます。
printf '%s\n' "${myarray[@]}" | mybinary -f inputfile.txt -o outputfile.txt