Vielleicht wurde dies schon einmal beantwortet, ich würde einen Link zu einer anderen Antwort begrüßen ...
Wenn ich einen Shell-Befehl (in einer bash
Shell) wie folgt ausführe :
make
Dann , während der Ausgang make
wird kontinuierlich durch von der STDOUT
der make
Befehl, wenn ich schreibe , make check
und drücken , enterbevor der erste Befehl beendet ausgeführt wird , wenn der make
Befehl schließlich endet der nächste Befehl make check
rechts und laufen abholt.
Meine Frage (n) sind einfach:
- Ist das gefährlich zu tun?
- Gibt es irgendwelche potenziellen unerwarteten Verhaltensweisen aufgrund dieser Art von Eiltippen?
- Warum funktioniert das so?
Antworten:
Es funktioniert so, wie es funktioniert, weil Unix Vollduplex ist. Wie Ritchie im UNIX-Timesharing-System sagte : Ein Rückblick :
[Zitat beenden]
Davon abgesehen gibt es einige moderne Programme, die jeden Tippfehler auffressen oder verwerfen.
ssh
undapt-get
sind zwei Beispiele. Wenn Sie während der Ausführung einen Tippvorgang ausführen, ist möglicherweise der erste Teil Ihrer Eingabe verschwunden. Das könnte möglicherweise ein Problem sein.quelle
bash
fork()
s undexec
sSTDIN
der Bash-Shell noch zugeordnet? Es hört sich so an, als wäre die Antwort nein. Bash scheint für den nächsten Befehl zu puffern. Ist das korrekt?&
.STDIN
fifo gehandhabt? Und ich nehme an, dass, wenn der untergeordnete Prozess von Bash sein geerbtes Datei-Handle nicht explizit schließt,STDIN
er dennoch aus der zusätzlichen Eingabe lesen könnte ?Das grundlegende Verhalten Sie sehen , ist , dass die Eingabe in einem Puffer irgendwo sitzt , bis es gelesen hat (gut, wenn Sie genug geben, schließlich die Puffer füllt sich, und etwas verloren geht, dass ein sein würde viel Tipparbeit obwohl). Die meisten Dinge, die von make ausgeführt werden, lesen nicht aus STDIN, daher bleibt es im Puffer.
Die Gefahr besteht darin, dass der falsche Befehl Ihre Eingabe liest. Ruft beispielsweise
make
etwas auf, das Sie dazu auffordert, und liest dann möglicherweise Ihren nächsten Befehl als Antwort. Wie gefährlich das ist, hängt natürlich vom Kommando ab. (Möglicherweise werden auch alle Eingaben zuerst gelöscht und nur Ihre vorherigen Eingaben verworfen.)Ein Befehl, der häufig in Makefiles verwendet wird, ist TeX. Wenn ein Fehler auftritt (und dem Benutzer kein Flag zugewiesen wurde, um ihn nie zur Eingabe aufzufordern), werden Sie gefragt, wie Sie fortfahren möchten.
Eine bessere Option ist wahrscheinlich zu laufen:
make && make check
.quelle
make
in Ihrem Beispiel) erfolgreich ausgeführt wurde. Könnte zum Beispielmake foo
Enter>./foo
Enter ein Problem verursachen. Vielleicht möchten Sie versuchen, sich daran zu gewöhnen, Dinge wie zu schreibenmake && make check
, bei denen der zweite Befehl nur ausgeführt wird, wenn der erste erfolgreich ist.make check
, würden Sie am Ende den Befehl ausführenheck
, der auf Ihrem System wahrscheinlich nicht vorhanden ist (aber möglicherweise etwas unangenehmes ist). Wenn der erste Befehl etwas Gutes ist, das Sie kennen und dem Sie vertrauen, sehe ich kein sofortiges Problem.quelle
ls
undmount
zum Beispiel. Ich versuche zu verstehen, wie die gepufferte Eingabe behandelt wird. Danke für die Antwort.