2012-04-14 86 views
1

因此,我有三个用于NVIDIA CUDA API的安装程序 - 第一个是驱动程序,并带有很好的静默安装标志选项(但必须是root用户并且必须具有运行级别3)。在Bash脚本中格式化用户命令内的脚本

后两个后续手动如下所示安装(切出事后安装出于简洁的长乱七八糟)

[根]#SH cudatoolkit_4.1.28_linux_64_rhel5.x.run验证归档 完整性.. 。 都好。解压NVIDIA CUDA .............................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ............................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..........................................
输入安装路径(默认为/ usr/local/cuda,'/ cuda'将为 追加):
CUDA的早期版本位于/ usr/local/cuda/bin
要卸载吗? (是/否/中止):是

换句话说,我需要认识到: “进入安装路径”,并输出一个“\ n”

现在棘手的问题是卸载可能不永远在那里。如果不是,我只需等待安装完成,但是如果我看到“您想卸载吗?”我需要输出“是”才能完成。

下面的第三个也是最后的安装程序的输出显示....

[根]#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 /本地/ CUDA):

对于这一个,没有卸载动作所以它看似有点简单。

我只需要检测“进入安装路径”输出“在/ usr /本地/ 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" 

这个切换到正确的根(一旦输入密码),并与内置的选项正确安装驱动程序。然后,它似乎产生第二个安装过程并输入第一个参数(回车),但似乎过早退出第二个安装程序(例如,我看不到“是”选项)。

我觉得我非常接近,希望有人能指出我要去哪里错误,并建议正确的语法。

注: 我加入了百胜安装命令,如一些我安装在机器没有想到(股票CentOS 6),这样节省了我的麻烦有....

+0

请不要多发帖子 - http://superuser.com/q/412259/4714 – 2012-04-14 10:48:01

回答

3

可能是这里超时的问题......不知道安装程序需要多长时间。
默认期望超时时间为10秒,如果没有看到当时的预期的文本,它会继续不分,你可以改变,像这样的超时值:

expect -timeout 100 $INSTALL_PATH_REQUEST 

还加入了$是从

YES="\"Yes\"" 

要:

YES="\"Yes\r\"" 

(最好使用\ r而非\ n的$ CR太)

它也期待一些“安全弦”在安装,例如到底是个好主意:

expect -timeout 320 "Install Complete." 

所以希望脚本不会终止前的催生过程完成。

+0

谢谢,会试试这个,回到你身上怎么回事! – 2012-04-17 02:20:36

+0

试过,结合@glenn杰克曼这里的解决方案: http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement 什么结束了发生的事情我是得到一个错误 '执行命令名'/ usr/bin/expect'时出现无效#“' 正如你猜测的那样,超时和''\ r''s有所帮助,但我仍然在为条件部分努力。在glenn jackman的解决方案中的第一个(也是唯一的)EOF之后需要另一个EOF吗? – 2012-04-21 00:32:17

+0

WOOO!一旦我将EOF加回到所有工作都像魅力的东西中。脚本工作完美.... unintendended CUDA安装工作完美。:) Yay团队合作! 这里是杰克曼的文章: http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement – 2012-04-22 19:17:09