Bash-Skript zum Übergeben von Argumenten an ein Skript

Bash-Skript zum Übergeben von Argumenten an ein Skript

Ich habe nicht viel Erfahrung mit Bash-Skripten. Was ich hier versuche, ist vielleicht nicht kompliziert, aber ich habe einfach ein paar Probleme.

Ich habe also ein C-Skript, das ich für ungefähr 70.000 Dateien verwenden muss. Das Skript forderte bestimmte Eingaben auf, die ich nacheinander eingeben musste. Beispielsweise fordert es mich sieben Mal hintereinander auf, (j/n) für Ja oder Nein einzugeben. Wenn ich das Skript also beispielsweise für eine Datei ausführe, würde es mich auffordern, für etwas Ja oder Nein einzugeben, gefolgt von mehreren Eingabeaufforderungen mit (j/n). In diesem Fall gibt es sieben J/n-Eingabeaufforderungen. Anschließend werden mehrere andere Parameter abgefragt, die ich eingebe, sobald sie abgefragt werden, z. B. c für Fortfahren, 100 für Prozent usw.

Alle diese Parameter sind für alle 70.000 Dateien gleich. Ich habe mich gefragt, ob mir jemand erklären kann, wie ich alle diese Argumente an das Bash-Skript übergebe, sobald sie abgefragt werden. Ziemlich einfach, aber das ist, was ich bisher habe:

var='testdir/*'
for i in var; do
    /script $i
done

Die obigen Bash-Befehle rufen das Skript auf, fordern mich jedoch auf, alle diese Parameter für jede Datei einzugeben. Hinweis: Ich kann das zugrunde liegende Skript nicht manipulieren.

Antwort1

Dies ist ein Job für expect.

Nehmen wir an, Ihr C-Programm gibt ungefähr Folgendes aus:

question 1? (y/n):
question 2? (y/n):
enter some percent value:
bunch of stuff
confirm? (y/n):

Sie würden ein Expect-Skript wie das folgende schreiben:

#!/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
}

Dann entweder chmod +xdas Skript und führen Sie es aus, oderexpect /path/to/script

verwandte Informationen