2012-04-14 3 views
1

NVIDIA의 CUDA API를위한 3 가지 설치 프로그램이 있습니다. 첫 번째는 드라이버이며 멋진 자동 설치 플래그 옵션이 있습니다 (그러나 루트 권한이 있어야하며 실행 레벨을 가져야합니다. 삼). Bash 스크립트의 사용자 명령어 내부에 Expect Script 포맷하기

두 번째 두 후속

은 (간결 이후 설치의 긴 혼란을 잘라) 아래에 설치 수동으로 표시됩니다

[루트] # 쉬 cudatoolkit_4.1.28_linux_64_rhel5.x.run 아카이브를 무결성을 확인 .. . 문제 없다. NVIDIA 압축 해제 CUDA .............................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ............................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..........................................
설치 경로를 입력하십시오 (기본/usr/local/cuda, '/ cuda'는 이됩니다) :
이전 버전의 CUDA가/usr/local/cuda/bin에 있습니다.
제거 하시겠습니까? (예/아니오/중단) : 즉 예

, 내가 인식 할 필요가 없습니다 : 가 까다로운 부분이 제거 지금과 출력 '\ n을'

"설치 경로를 입력"하지 않을 수 있습니다 항상 거기에 있어야합니다. 설치가 끝나기를 기다릴 필요가 없지만 "제거 하시겠습니까?" 완료하려면 "예"를 출력해야합니다. 세 번째이자 마지막 설치 프로그램의 출력은 다음과 같습니다

....

[루트] # 쉬 gpucomputingsdk_4.1.28_linux.run
확인 아카이브 무결성 ... 모든 좋은.
NVIDIA GPU 컴퓨팅 압축 해제

SDK ......................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..................................

설치 경로 입력 (기본값 ~/NVIDIA_GPU_Computing_SDK) : /usr/local/CUDA_SDK

CUDA가/usr/local/cuda에 있습니다
이 맞으면 아래에서 기본값을 선택하십시오. 이 정확하지 않으면
는 는 CUDA 경로 (기본/usr/지방/CUDA)를 install을 입력 CUDA

에 올바른 경로를 입력 :
이 하나 들어

이 보이는, 그래서 더 제거 조치는 없다 조금 더 간단합니다.

난 그냥 감지 및 출력 "/ usr/지방/CUDA_SDK \ n을" "설치 경로 입력"을 선택한 다음 감지 할 필요가 "\ n"

내 생각이 사용하는 것이었다 출력 "CUDA 설치 경로를 입력합니다" 한 쌍의 예상 스크립트 (각 설치 프로그램마다 하나씩)가 루트로 전환하라는 명령의 큰 따옴표 안에 중첩되어 있기 때문에이 문제에 약간의 어려움이 있습니다.내가 현재 가지고 것은 :이 (암호를 입력하면) 제대로 뿌리 전환하고 올바르게 옵션에 내장 된 드라이버를 설치

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

답변

3

시간 제한이있는 문제 일 수 있습니다 ... 설치 프로그램의 시간이 얼마나 걸릴지 모릅니다.

expect -timeout 100 $INSTALL_PATH_REQUEST 

을 또한 $ YES에서 변경 : 해당 시간에 예상되는 텍스트를 표시하지 않는 경우
기본값은, 당신이 지금처럼 시간 제한 값을 변경할 수에 관계없이 진행되며, 제한 시간은 10 초입니다 기대

YES="\"Yes\"" 

사람 :

YES="\"Yes\r\"" 

(대신 \ n 개의 너무 $ CR에서 \ r에를 사용하는 것이 가장 좋습니다) 스폰 프로세스가 완료되기 전에 그래서 기대 스크립트가 종료되지 않습니다

expect -timeout 320 "Install Complete." 

:

또한 예를 들어, 설치의 끝에서 약간의 안전 문자열 '을 기대하는 것이 좋습니다.

+0

고마워, 이것을 시도하고 어떻게 돌아 갔는지! –

+0

여기 @glenn의 잭맨 솔루션과 결합이 시도 : http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement 무슨 일이 끝나는 것은 오류가 발생합니다되고 'invalid command name "/ usr/bin/expect"while execution ... "' 당신이 추측했듯이 타임 아웃과''\ r ''이 도움이되었지만 여전히 조건부 부분에 어려움을 겪고 있습니다. glenn jackman의 솔루션에서 첫 번째 (그리고 유일한) EOF 다음에 닫는 중괄호 뒤에 다른 EOF가 필요합니까? –

+0

WOOO! EOF를 다시 한번 추가하면 매력이 생겼습니다. 시간 초과 교정은 glenn jackman의 조건부 기대 로직 수정과 결합되었습니다. 스크립트가 완벽하게 작동합니다 ... 의도하지 않은 CUDA 설치가 완벽하게 작동합니다. :) 예, 팀워크가 있습니다. 다음은 Jackman의 게시물입니다. http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement –