【发布时间】:2012-04-14 04:15:45
【问题描述】:
所以我有 NVIDIA 的 CUDA API 的三个安装程序——第一个是一个驱动程序,带有很好的静默安装标志选项(但你必须是 root 并且必须有运行级别 3)。
下面显示的是手动安装的后两个(为简洁起见,省略了之后安装的冗长混乱)
[root]# sh cudatoolkit_4.1.28_linux_64_rhel5.x.run 验证存档 诚信……一切都好。解压缩 NVIDIA CUDA.................................................. ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... .................................................. ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................
输入安装路径(默认 /usr/local/cuda,'/cuda' 将是 附加):
在 /usr/local/cuda/bin 中找到了以前版本的 CUDA
您要卸载吗? (是/否/中止):是
换句话说,我需要认识到: “输入安装路径”并输出一个'\n'
现在棘手的部分是卸载可能并不总是存在。如果不是,我只需要等待安装完成,但如果我看到“你想卸载吗?”我需要输出“是”才能完成。
第三个也是最后一个安装程序的输出如下所示......
[root]# sh gpucomputingsdk_4.1.28_linux.run
验证存档 完整性...一切都好。
解压缩 NVIDIA GPU 计算
SDK.................................................. ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... .................................................. ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ...
输入安装路径(默认 ~/NVIDIA_GPU_Computing_SDK): /usr/local/CUDA_SDK
CUDA 位于 /usr/local/cuda
如果 这是正确的,请选择下面的默认值。
如果不正确, 输入正确的 CUDA 路径
输入 CUDA 安装路径 (默认 /usr/local/cuda):
对于这个,没有卸载操作,所以看起来有点简单。
我只需要检测“输入安装路径”并输出“/usr/local/CUDA_SDK\n”然后检测“输入CUDA安装路径”并输出“\n”
我的想法是使用一对期望脚本——每个安装程序一个——但由于切换到 root 的命令的双引号内嵌套,我在这方面遇到了一些困难。我目前拥有的是:
#!/bin/bash
CR="\"\n\""
YES="\"Yes\""
INSTALL_PATH_REQUEST="\"Enter install path\""
CUDA_PATH_REQUEST="\"Enter CUDA install path\""
UNINSTALL_REQUEST="\"Would you like to uninstall?\""
TOOLKIT=`ls -t cudatoolkit* | head -n 1`
TOOLKIT_EXPECT="sh $TOOLKIT"
SDK=`ls -t gpucomputingsdk* | head -n 1`
SDK_INSTALL_PATH="\"/usr/local/CUDA_SDK\n\""
SDK_EXPECT="sh $SDK"
/bin/su root -c "yum -q -y install expect expectk;
/sbin/init 3; sh `ls -t NVIDIA*|head -n 1` -s --update -a -X;
/usr/bin/expect <<EOF;
spawn $TOOLKIT_EXPECT
expect $INSTALL_PATH_REQUEST
send $CR
expect $UNINSTALL_REQUEST
send $YES
EOF
/usr/bin/expect <<EOF;
spawn $SDK_EXPECT
expect $INSTALL_PATH_REQUEST
send $SDK_INSTALL_PATH
expect $CUDA_PATH_REQUEST
send $CR
EOF
/sbin/init 5"
这会正确切换到 root(输入密码后)并正确安装带有内置选项的驱动程序。然后它似乎产生了第二个安装过程并输入第一个参数(回车),但似乎过早地退出了第二个安装程序(例如,我没有看到“是”选项。)。
我觉得我已经很接近了,希望有人能指出我哪里出错并建议正确的语法。
注意事项:
我添加了 yum install 命令,因为我安装的一些机器没有预料到(股票CentOS 6),这样就省去了我那里的麻烦......
【问题讨论】:
-
请不要多发 -- superuser.com/q/412259/4714
标签: bash shell scripting expect