En 'bash', comment faire

Je ne sais pas expliciter les questions que je veux poser :confused:
Je voudrais compléter mon script sur les sauvegardes par les commandes que je fais systématiquement par la suite : “updater”, “upgrader”, puis mettre à jour ‘surveillance’ et ‘rkhunter’.

Pour
sudo apt-get updade
pas de problème, facile à ajouter
Pour les mises à jour de surveillance et de rkhunter une fois l’“upgradation” faite, pas de problèmes non plus :
sudo dpkg-reconfigure surveillance && sudo rkhunter --propupd
Avec les éventuelles acceptation o/*

Le PROBLÈME se situe au milieu :
sudo apt-get upgrade
J’emploi apt-listbugs et j’épingle systématiquement les paquets qui sont reconnus ‘bogués’.
Quand il n’y en a aucun, pas de problème, l’“upgradation” se fait tranquillement et le script continue une fois accepté le choix classique :
“Etes-vous certains de vouloir installer les paquets ci-dessus ? [Y/n/?—]”
Je tape sur ‘entrée’ et ça continue.
Il en va tout autrement quand il y a des bogues car mon choix : ‘p’ pour les épingler, conduit à une demande de confirmation puis à un second choix par défaut : ‘N’, logique puisqu’on ne veut pas continuer.
Là, il y a sortie brutale du script.

Ma question (on y vient) :
Bash gère-t-il les appuis sur une touche, en l’occurrence la touche ‘p’ et la touche ‘Entrée’ ?
Si oui, je pourrais faire une condition simple à chaque appui et j’aimerais un exemple.
Sinon, voyez-vous une autre façon de contourner ce problème?
Merci d’avoir pris la patience de déchiffrer mon blabla :006

39 membres qui ont lu et aucune réponse, j’en déduis que ce que je demande est impossible :open_mouth:

Tu fais bien de « uper ». Si c’est possible.

Le programme lis ta réponse sur son entrée standard donc :

pour lui donner un « p » et

pour entrée.

hello
je suggère de mettre dans truc et astuce et le wiki :slightly_smiling: sa peux aider pas mal de débutant (comme moi :smiley: )

[quote=“MisterFreez”]Tu fais bien de « uper ». Si c’est possible.

Le programme lis ta réponse sur son entrée standard donc :

pour lui donner un « p » et

pour entrée.[/quote]
Super !
Je vais essayer de coder ça demain et je présenterai mon travail au Prof :smiley:
Edit :
J’ai quand même besoin d’un exemple simple car je ne pige pas ‘prg’ ?
Je ne suis pas sûr que tu aies compris ma requête :
Quand je fais “apt-get upgrade”, à plusieurs moments, il me demande confirmation et c’est moi qui tape sur “entrée”.
Ce n’est plus dans le script proprement dit mais dans la commande "apt-get upgrade"
Ce que je voudrais faire, c’est :
si je tape sur “entree”, continue
si je tape sur “p”, obéis à cette commande (donc continue)
si je tape sur “entree” sort proprement

Je dis 'tape sur “entree” mais en fait, c’est la réponse par défaut et la dernière est [N/?/…]

Salut,
Ton problème, avec apt-listbugs c’est que de toute façon, le script va s’arrêter brutalement par sortie de apt-get.

Quant tu marques un paquet:
p + entrée > oui j’épingle
y (+ entrée ?) > êtes-vous sur… ?
n (+ entrée ?) > voulez-vous installer le paquet (non) et sortie sur une erreur de apt-get

Il faut alors relancer l’upgrade.
Il faudrait donc prévoir de reprendre le script à l’endroit ou apt-get upgrade s’exécute.

Pour rkhunter, tu peux le faire automatiquement à chaque upgrade avec une commande placée dans /etc/apt/apt.conf.d
Edit: Idem pour surveillance.

Edit: En marquant systématiquement avec apt-listbugs tu bloques des paquets qui ne sont plus bogués ou bogués pour des architectures qui ne sont pas la tienne, c’est dommage! :083

Bonjour,

Ce ne serait pas plus simple avec un utilitaire comme expect?

Description : Automates interactive applications Expect is a tool for automating interactive applications according to a script. Following the script, Expect knows what can be expected from a program and what the correct response should be. Expect is also useful for testing these same applications. And by adding Tk, you can also wrap interactive applications in X11 GUIs. An interpreted language provides branching and high-level control structures to direct the dialogue. In addition, the user can take control and interact directly when desired, afterward returning control to the script. Site : http://sourceforge.net/projects/expect/

Ça dépend de ce qu’on veut faire, (je n’utilise pas apt-listbug), ça dépend du niveau de complexité des interactions (expect gère aussi les terminaux virtuels ce qui permet par exemple de rentrer son mot de passe ssh automatiquement).

Michel, le mieux est que tu me donnes une ligne de commande qui puisse faire ce qui suit et ensuite, je ferai les essai en fonction de la réponse :
soit un programme bash :
#!/bin/bash
sudo apt-get upgrade
if [ je tape sur la touche p ]
then
echo 'la réponse est bonne’
fi
Je veux seulement que tu me rédige la ligne en bleu.

read if [ "$REPLY" == 'p' ] ; then

C’est plus compliqué, il te faut une routine qui

  1. Impose le traitement d’une ligne sans attendre le retour chariot

  2. Un truc qui te renvoit le caractère tapé.

  3. se fait par
    stty -icanon

  4. se fait par un petit programme C genre celui là (que j’appele getc.c

[code]#include <stdio.h>

main ()
{
printf("%c",getchar());
}

[/code]
gcc -o getc getc.c

Ton code devient

stty -icanon if [ `getc` = "Y" ] ; then echo "Y mec" else echo "ah ben non" fi

À le problème c’est de ne pas bufferiser la lecture de l’entrée standard ?

read -n1 if [ "${REPLY}" == 'p' ] ; then
devrait faire l’affaire :slightly_smiling:

Tiens je n’avais jamais pensé à voir si read avait des options… Ça règle le pbm définitivement ça.

Dans ce cas, que veux dire le ‘-n1’ de read ?

Lire un caractère (-n2 lire 2 caractères).
Pour avoir plus d’infos sur les commandes biltin, il faut utiliser la commande help :

@fran.b > Moi non plus j’ai découvert cette option tout à l’heure. Je trouvais dommage d’avoir à utiliser du c (ou tout autre langage) pour quelque chose d’aussi simple. :slightly_smiling:

Bof, ça prend trois secondes, moins en tout cas que de chercher l’optionquivabien

Bon, ça ne fonctionne pas à l’intérieur de la commande apt-get upgrade.
Les tests sont fait après.
Pas grave, j’ai fait un petit script complémentaire pour upgrade et le reste des petits contrôle que j’effectue à la suite et ce n’est pas beaucoup plus long.
Merci à tous.

Qu’est ce que tu veux dire par ça ne marche pas avec apt-get upgrade?

La commande sur un script seul, sans “upgrade” fonctionne et c’est normal mais en l’occurrence, le test d’appui sur une touche doit être effectué ni avant, ni après mais au milieu de la commande “apt-get upgrade”.
Alors, je ne sais pas si c’est possible mais avec le script d’essai suivant, ça ne fonctionne pas, que je place le ‘read -n1’ avant ou comme dessous, après upgrade…

#!/bin/bash sudo apt-get upgrade read -n1 if [ "${REPLY}" == 'p' ] ; then echo "c'est bon" fi
Quand je lance ce script, tout se passe normalement au niveau de 'upgrade’
Arrivé à ‘listbugs’ (auquel je tiens), il énumère les bogues puis demande le choix.
Je tape ‘p’ pour l’épinglage, ensuite les demandes de confirmation classique dont la dernière où je réponds 'N’
Là apt-get upgrade sort avec erreur 10.

Si la commande read -n1 avait été prise en compte, sitôt tapé le ‘p’, j’aurais dû avoir une réponse “c’est bon” … ce qui n’est pas le cas.

Si tu as une idée ?

Tu crée un fifo
Tu donne ce fifo en entrée d’apt-get
Tu fais ton read etc
Tu écris dans le fifo pour piloter apt-get