12 votes

Comment puis-je répondre à une invite de terminal avant qu'elle ne soit posée ?

Je tente d'automatiser l'installation de CUDA sur un modèle de machine virtuelle Ubuntu 18.04 dans le cadre du script de démarrage. Je suis très novice en bash et en informatique en nuage en général. Quand j'exécute la commande pour installer CUDA, en plein milieu de l'installation, on me demande toujours de choisir un pays et une langue dans une liste d'options en saisissant les numéros d'identification correspondants.

En gros, quand j'exécute:

sudo apt-get -y install cuda

Je sais que je vais devoir entrer "31" et "1" manuellement pour que l'installation soit terminée. En tant que débutant en la matière, ma question est donc "Comment automatiser ces saisies pour ne pas avoir à les taper manuellement à chaque fois que je lance une nouvelle copie de ce modèle de machine virtuelle?"

Ma première approche était la suivante:

printf "31\n1\n" | sudo apt-get -y install cuda

Mais cela ne semble pas fonctionner comme je m'y attendais. Aucune saisie automatique n'est effectuée.

Mon objectif final est que tout soit pris en charge dans un seul script de démarrage que je n'ai pas à modifier.

Je vous remercie pour toute l'aide apportée, et je m'excuse si ma question a déjà été traitée ailleurs (si c'est le cas, je n'ai pas pu la trouver et j'apprécierais grandement d'être dirigé vers elle!)

22voto

raj Points 6225

Installez expect et écrivez un script expect qui répond aux invitations. Cela ressemblera à ceci (attention - non testé de quelque manière que ce soit):

#!/usr/bin/expect
spawn sudo apt-get -y install cuda
expect "première invitation :"
send "31\r"
expect "deuxième invitation :"
send "1\r"
wait

où vous devez substituer les invitations réelles appropriées à la place de "première invitation :" et "deuxième invitation :".

Consultez ici pour plus d'informations sur expect:

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

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

Vous pourriez également être intéressé par autoexpect, qui peut générer un script automatiquement en enregistrant votre session interactive:

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X