111 votes

Simulation de l'appui sur la touche ENTER dans bash script.

J'ai créé un bash script très simple qui exécute quelques commandes. L'une de ces commandes a besoin de l'entrée de l'utilisateur pendant l'exécution. c'est-à-dire qu'il demande à l'utilisateur "voulez-vous blah blah blah ?", je veux simplement envoyer une pression sur la touche entrée à cela de sorte que le script sera complètement automatisé.

Je n'aurai pas à attendre l'entrée ou quoi que ce soit pendant l'exécution, il suffit d'envoyer la pression sur le clavier et le tampon d'entrée se chargera du reste.

1 votes

Si l'outil que vous essayez d'automatiser est apt-get la bonne solution est de pré-enseigner la base de données debconf avec vos valeurs préférées ; ainsi, il ne vous le demandera pas.

0 votes

Vous pourriez utiliser printf au lieu de echo : printf "hello \n "

150voto

Tilman Vogel Points 2379
echo -ne '\n' | <yourfinecommandhere>

ou en profitant de la nouvelle ligne implicite que génère echo (merci Marcin)

echo | <yourfinecommandhere>

Maintenant, nous pouvons simplement utiliser le --sk option :

--sk , --skip-keypress N'attendez pas que vous appuyiez sur une touche après chaque test.

c'est-à-dire sudo rkhunter --sk --checkall

1 votes

Si vous envoyez cette sortie vers xxd vous obtenez 5c6e hex, qui est une valeur littérale \n . si vous faites juste echo | xxd vous vous retrouvez en fait avec un hexagone de 0a . Je pense donc que vous pouvez utiliser ce dont votre programme a besoin.

3 votes

Marcin, je suis surpris, je comprends. 0a0a qui n'est toujours pas comme prévu, en ajoutant un -n supprime la nouvelle ligne implicite. Mais vous avez bien sûr raison, un simple echo | ... fonctionne bien ici. Je vais mettre à jour ma réponse.

0 votes

Heh, ça ne m'a pas semblé correct, alors j'ai dû le passer au xxd. C'est de loin la méthode la plus simple et la plus efficace pour voir exactement ce que les commandes produisent. J'adore les trucs stupides d'Unix.

44voto

pavium Points 7845

Vous pourriez trouver le yes utile.

Voir man yes

66 votes

yes Je le trouve utile.

2 votes

Cela simule le fait d'appuyer sur "y" à plusieurs reprises plutôt que sur la touche Entrée. Bien que ce soit probablement ce que vous voulez pour les questions oui/non, cela ne fonctionnera pas pour tout ce qui n'attend pas un "y".

6 votes

@BurhanAli : vous pouvez changer ce que yes envoie comme sortie. Lisez la page de manuel.

43voto

David Hamner Points 521

Vous pouvez simplement utiliser oui .

# yes "" | someCommand

25voto

kenorb Points 2464

Voici un exemple d'utilisation en utilisant expect :

#!/usr/bin/expect
set timeout 360
spawn my_command # Replace with your command.
expect "Do you want to continue?" { send "\r" }

Vérifiez : man expect pour de plus amples informations.

0 votes

Particulièrement utile si plusieurs pressions sur la touche Entrée doivent être envoyées.

0 votes

C'est la meilleure façon de procéder, en particulier pour des choses comme les phars où différentes chaînes stdout et stdin sont envoyées.

0 votes

N'oubliez pas non plus d'entrer my_command arg si vous avez un argument.

11voto

barti_ddu Points 5423

Vous pouvez utiliser s'attendre à ( L'homme attend est accompagné d'exemples).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X