私は bash スクリプトの経験があまりありません。ここでやろうとしていることは複雑ではないかもしれませんが、いくつか問題があります。
約 70,000 個のファイルで実行するために使用する C スクリプトがあります。スクリプトは、1 つずつ入力する特定の入力を呼び出しました。たとえば、yes または no の (y/n) を 7 回続けて入力するように求められます。つまり、たとえば、1 つのファイルでスクリプトを実行すると、何かに対して yes または no を入力するように求められ、その後に (y/n) を尋ねる複数のプロンプトが表示されます。この場合、y/n プロンプトは 7 回あります。次に、プロンプトが表示されたら入力する他のいくつかのパラメーターが求められます (たとえば、続行の場合は c、パーセンテージの場合は 100 など)。
これらのパラメータはすべて、70,000 個のファイルすべてで同じです。プロンプトが表示されたら、これらすべての引数を bash スクリプトに渡す方法を誰か教えていただけないでしょうか。かなり基本的なことですが、これまでのところ、次のようになっています。
var='testdir/*'
for i in var; do
/script $i
done
上記の bash コマンドはスクリプトを呼び出しますが、各ファイルに対してすべてのパラメータを入力するように要求します。注: 基礎となるスクリプトを操作することはできません。
答え1
これは の仕事ですexpect
。
C プログラムが次のようなものを出力するとします。
question 1? (y/n):
question 2? (y/n):
enter some percent value:
bunch of stuff
confirm? (y/n):
次のような expect スクリプトを記述します。
#!/usr/bin/expect
foreach file [glob /path/to/70k/files/*] {
spawn "/path/to/c_prog" $file
expect "question 1? (y/n): " { send "y\r" }
expect "question 2? (y/n): " { send "n\r" }
expect "enter some percent value: " { send "100\r" }
expect "confirm? (y/n): " { send "y\r" }
interact
}
次にchmod +x
スクリプトを実行して、expect /path/to/script