Je suis en train d'exécuter un script qui demande d'entrer «y» à chaque opération. Je cherche une solution comme $ ./script < echo 'yyyyyyyyyyyyyy'
passer toutes mes entrées en même temps.
command-line
input
NewMrd
la source
la source
-f
option fonctionne bien avec certaines commandes.Réponses:
Il existe une commande créée spécifiquement pour ce cas:
yes
Ce que cela fait est de connecter la sortie de
yes
à l'entrée de./script
. Ainsi, lorsque./script
vous demandez une entrée utilisateur, il obtiendra le résultat deyes
. La sortie deyes
est un flux sans fin dey
suivi d'une nouvelle ligne. Donc, fondamentalement, comme si l'utilisateur entraity
pour chaque question de./script
.Si vous voulez dire non (
n
) au lieu de oui (y
), vous pouvez le faire comme ceci:Notez que certains outils ont une option pour toujours considérer
yes
comme réponse. Voir par exemple ici: Ignorez l'invite yes / no dans 'apt-get upgrade'Autres méthodes pour saisir une entrée:
Si vous savez exactement combien
y
votre script en attend, vous pouvez le faire comme ceci:Les nouvelles lignes (
\n
) sont les touches d'entrée.En utilisant à la
printf
place deyes
vous avez un contrôle plus fin des entrées:Notez que dans certains cas rares, la commande ne nécessite pas que l'utilisateur appuie sur Entrée après le caractère. dans ce cas, laissez les nouvelles lignes:
Par souci d’exhaustivité, vous pouvez également utiliser un document here :
Ou si votre shell supporte une chaîne ici :
Ou vous pouvez créer un fichier avec une entrée par ligne:
Si la commande est suffisamment complexe et que les méthodes ci-dessus ne suffisent plus, vous pouvez utiliser expect .
Voici un exemple de script attendu super simple:
Nitpick technique:
L'invocation de commande hypothétique que vous avez donnée dans votre question ne fonctionne pas:
En effet, la grammaire du shell autorise un opérateur de redirection n'importe où dans la ligne de commande. En ce qui concerne le shell, votre ligne de commande hypothétique est la même que cette ligne:
Cela signifie que
./script
sera appelé avec l'argument'yyyyyyyyyyyyyy'
et le stdin obtiendra l'entrée d'un fichier nomméecho
. Et bash se plaint puisque le fichier n'existe pas.la source
cannot enable tty mode on non tty input
. Souhaitez-vous connaître une solution de contournement pour cela?printf
astuce avec unrun
fichier dont je dois automatiser le processus d'installation, tout ce qui se passe est que je reçois un message d'erreurWarning: Tried to connect to session manager, None of the authentication protocols specified are supported
, et le script s'ouvre dans un nouveau terminal et me demande de saisir mon entrée manuellement, comme d'habitude. Cela se passe d'ailleurs sur Debian. Aucune suggestion?Utilisez la commande
yes
:Extrait de la page de manuel:
la source
Certaines choses (
apt-get
par exemple) acceptent que des indicateurs spéciaux soient exécutés en mode silencieux (et acceptent les valeurs par défaut). Dansapt-get
le cas de, vous passez juste un-y
drapeau. Cela dépend complètement de votre script cependant.Si vous avez besoin de choses plus compliquées, vous pouvez envelopper votre script dans un script attendu. expect vous permet de lire la sortie et d'envoyer des entrées afin que vous puissiez faire des choses assez compliquées que d'autres scripts ne permettraient pas. Voici l' un des exemples de sa page Wikipedia :
la source
.sh
script shell, non? Ou y a-t-il un moyen?Dans le script shell, vous pouvez également utiliser le truc suivant: spawn, expect et send
Cependant, dans le scénario ci-dessus, vous devrez donner la phrase que vous espérez obtenir pendant que vous exécutez le script pour plus d'exemples, cliquez sur le lien suivant
Attendez-vous à Bash
la source
D'accord, ce n'est peut-être pas une solution très élégante, mais si vous écrivez vos options dans un fichier séparé et que vous le transmettez ensuite en tant qu'entrée au script, cela fonctionnera également. Ainsi, si vous créez un nouveau fichier avec toutes vos options (appelez ce fichier sous le nom "options.in"), vous pourrez alors exécuter facilement votre script avec
./script.sh < options.in
et éditer / créer différents fichiers d'options selon vos besoins.la source
options.in
fichier? Pouvez-vous donner un exemple?J'écrivais un script bash avec Dialog et j'avais besoin que cela se produise automatiquement aussi. Je l'ai fait et cela a fonctionné comme un charme.
la source
Vous pouvez fournir une entrée utilisateur à votre script avec
cat
, à partir d'un fichier texte, redirigé vers votre script avecbash
comme ceci:Il vous suffit de saisir les informations de votre choix dans votre fichier input.txt, quelles que soient les réponses souhaitées: y, n, chiffres, chaînes, etc.
la source