Peut-être que cela a été répondu précédemment, je souhaiterais un lien vers une autre réponse ...
Si j'exécute une commande shell (dans un bash
shell) comme celle-ci:
make
Ensuite, pendant que la sortie de make
défile à partir STDOUT
de la make
commande, si je tape make check
et appuie enteravant que la première commande ne soit terminée, lorsque la make
commande se termine enfin, la commande suivante make check
reprendra et s'exécutera.
Ma ou mes questions sont simplement:
- Est-ce dangereux à faire?
- Existe-t-il des comportements inattendus potentiels de ce type de frappe précipitée?
- Pourquoi cela fonctionne-t-il ainsi?
Réponses:
Cela fonctionne comme il le fait car Unix est en duplex intégral. Comme l'a dit Ritchie dans The UNIX Time-sharing System: A Retrospective :
[fin de citation]
Cela étant dit, il existe des programmes modernes qui dévorent ou jettent tout type de frappe;
ssh
etapt-get
sont deux exemples. Si vous tapez à l'avance pendant leur exécution, vous constaterez peut-être que la première partie de votre saisie a disparu. Cela pourrait éventuellement être un problème.la source
bash
fork()
s etexec
s la commande, la première commande est-elle toujours attachée auSTDIN
shell bash? Il semble que la réponse soit non, bash semblerait être en mémoire tampon pour la prochaine commande. Est-ce exact?&
.STDIN
géré d'une manière fifo? Et je suppose qu'à moins que le processus enfant de bash ne ferme explicitement son handle de fichier hérité,STDIN
il pourrait toujours lire à partir d'une saisie supplémentaire?Le comportement de base que vous voyez est que l'entrée se trouve quelque part dans un tampon jusqu'à ce qu'elle soit lue (eh bien, si vous tapez suffisamment, les tampons se rempliront éventuellement, et quelque chose sera perdu, ce serait beaucoup de frappe cependant). La plupart des choses exécutées par make ne lisent pas depuis STDIN, il reste donc dans le tampon.
Le danger est que la mauvaise commande lit votre entrée. Par exemple,
make
appelle quelque chose qui décide de vous inviter, puis il pourrait lire votre prochaine commande comme réponse. Bien sûr, le danger dépend de la commande. (Ils peuvent également vider toutes les entrées en premier, jetant simplement votre entrée précédente.)Une commande, couramment utilisée dans Makefiles, qui peut le faire est TeX. S'il rencontre une erreur (et n'a pas reçu d'indicateur pour ne jamais inviter l'utilisateur), il vous demandera comment vous souhaitez continuer.
Une meilleure option est probablement à exécuter:
make && make check
.la source
make
réussite de la première commande ( , dans votre exemple). Par exemple, celamake foo
Enter>./foo
Enter pourrait provoquer un problème. Vous voudrez peut-être essayer de prendre l'habitude de taper des choses commemake && make check
, où la deuxième commande ne sera exécutée que si la première réussit.make check
, vous finiriez par exécuter la commandeheck
, qui n'existe probablement pas sur votre système (mais pourrait être quelque chose de méchant). Si la première commande est quelque chose de bénin que vous connaissez et en qui vous avez confiance, je ne vois immédiatement aucun problème.la source
ls
-à- dire etmount
par exemple. J'essaie de comprendre comment l'entrée en mémoire tampon est gérée. Merci d'avoir répondu.