我对 bash 脚本没有太多经验。我在这里尝试做的事情可能并不复杂,但我只是遇到了一些问题。
所以我有一个 C 脚本,我必须使用它来运行大约 70,000 个文件。该脚本调用某些输入让我一一输入。例如,它提示我依次输入 (y/n) 是或否 7 次。例如,如果我在一个文件上运行脚本,它会提示我输入是或否,然后是多个提示询问 (y/n)。在这种情况下,有 7 个是/否提示。然后继续提示我输入的其他几个参数,例如 c 表示继续,100 表示百分比等。
所有这些参数对于所有 70,000 个文件都是相同的。我想知道是否有人可以指导我如何在提示后将所有这些参数传递给 bash 脚本。非常基本,但这是我目前所拥有的:
var='testdir/*'
for i in var; do
/script $i
done
Run Code Online (Sandbox Code Playgroud)
上面的 bash 命令调用脚本,但提示我为每个文件输入所有这些参数。注意:我无法操作底层脚本。
这是一份工作expect
。
假设您的 C 程序输出类似于以下内容:
question 1? (y/n):
question 2? (y/n):
enter some percent value:
bunch of stuff
confirm? (y/n):
Run Code Online (Sandbox Code Playgroud)
您将编写一个期望脚本,例如:
#!/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
}
Run Code Online (Sandbox Code Playgroud)
然后要么chmod +x
脚本并运行它,要么expect /path/to/script