如何在询问之前响应终端提示?

kai*_*002 12 command-line bash scripts cuda system-installation

我正在尝试在 Ubuntu 18.04 VM 模板上自动安装 CUDA 作为启动脚本的一部分。总的来说,我对 bash 和云计算很陌生。当我运行安装 CUDA 的命令时,在安装过程中总是提示我通过输入相应的 ID 号从选项列表中选择国家和语言。

基本上,当我运行时:

sudo apt-get -y install cuda
Run Code Online (Sandbox Code Playgroud)

我知道我将不得不手动输入“31”和“1”才能完成安装。作为一个相对的 n00b,我的问题是“我如何自动化这些输入,这样我就不必在每次启动这个 VM 模板的新副本时手动输入它们?”

我最初的方法是这样的:

printf "31\n1\n" | sudo apt-get -y install cuda
Run Code Online (Sandbox Code Playgroud)

但这似乎不像我预期的那样工作。没有输入是自动填充的。

我的最终目标是在一个我不必触及的启动脚本中处理所有事情。

我感谢任何和所有帮助,如果我的问题在其他地方得到了回答,我深表歉意(如果有,我一直无法找到它并且非常感谢被引导到它!)

raj*_*raj 21

安装expect并编写一个响应提示的预期脚本。这看起来像这样(警告 - 未以任何方式测试):

#!/usr/bin/expect
spawn sudo apt-get -y install cuda
expect "first prompt:"
send "31\r"
expect "second prompt:"
send "1\r"
wait
Run Code Online (Sandbox Code Playgroud)

您需要替换适当的实际提示而不是“第一个提示:”和“第二个提示:”。

在此处查看有关以下内容的更多信息expect

https://www.slashroot.in/expect-command-tutorial-linux-example-usage

http://tcl.tk/man/expect5.31/expect.1.html

您可能还对 感兴趣autoexpect,它可以通过观看您的交互式会话自动生成脚本:

http://tcl.tk/man/expect5.31/autoexpect.1.html