Wenn ich keine bestimmte Datei grep, funktioniert das Terminal nicht mehr

1247
Doug Fir

Ich lerne, wie man die Schale benutzt. Beim Spielen mit einigen grundlegenden Befehlen stieß ich auf ein Problem. Das ist ziemlich einfach und ich entschuldige mich, wenn das einige Leute aufregt.

Auf meinem Desktop gibt es eine Datei namens "myFirstShellScript.txt". In dieser Datei befindet sich eine Zeichenfolge "show system".

Wenn ich also beim Öffnen der Shell schreibe cd desktopund grep, dann gibt "show system" myFirstShellScript.txt"die Shell den Satz zurück, an dem die Zeichenfolge erscheint. Fein.

Aber ich wollte herumspielen. Ich gab dann ein grep "show system"und drückte die Eingabetaste. Ich habe mich gefragt, ob Grep den gesamten Desktop durchsuchen würde, da dies mein Pwd ist.

Was jedoch passiert ist, ist, dass das Terminal nicht mehr funktioniert. Zuerst dachte ich, es wäre vielleicht nur mit der Suche beschäftigt, aber es ist schon eine Weile her. Ich überprüfte dann, ob andere Befehle funktionieren würden - pwd - tut nichts, wenn ich die Eingabetaste drücke, bewegt sich der Cursor einfach in eine neue Zeile.

Ich habe dann versucht zu beenden. Ich habe "exit", "end" und "quit" versucht. Nichts. Das Terminalfenster reagiert nicht wie erwartet.

Ich weiß, ich könnte einfach einen weiteren Tab öffnen, wollte aber fragen, was ich hier am Terminal gemacht habe?

0
Drücken Sie Strg-C. Dies ist keine Programmierfrage. Sean Bright vor 11 Jahren 1

2 Antworten auf die Frage

3
Kevin

Wenn Sie grepeinen Dateinamen ( grep pattern file) angeben, durchsucht er diese Datei. Wenn Sie dies nicht tun, wird die Standardeingabe (stdin) durchsucht. Wenn Sie es in eine Pipe einschließen ( foo | grep), liest es aus der Pipe. Wenn Sie gerade laufen grep pattern, liest es Eingaben von der Konsole. Dies ist ein sehr verbreitetes Muster bei Unix- und Linux-Dienstprogrammen. Wenn Sie eingeben exit, end, quit, oder irgendetwas anderes, vergleicht es mit dem Muster und druckt es, wenn es passt, so als ob Sie eine Datei gegeben hatte. Geben Sie eine Zeile ein, die dem Muster entspricht - Sie werden sehen, dass sie zu Ihnen zurückkehrt.

Drücken Sie Ctrl+ D, um das Ende der Datei anzuzeigen. Ctrl+ Ctötet die meisten Programme, aber es ist weniger sauber als Ctrl+ D.

2
Jens

Grep ohne Argumente liest die Standardeingabe, die Ihr Terminal ist. Es wird so lange lesen, bis es auf das Dateiende-Zeichen trifft. Das Dateiende-Zeichen lautet Ctrl-D. Geben Sie das ein und grep ist fertig.

Wenn das nicht funktioniert, renne los stty -aund suche eof = ...nach deinem Eof-Charakter.

Gotcha-Warnung : nicht Ctrl-Dzweimal eingeben; Die zweite wird von Ihrer Shell gelesen. Wenn es sich um Ihre Login-Shell handelt, werden Sie denken, dass Sie fertig sind und beenden. Wenn Ihre Login-Shell beendet wird (genau wie bei der Eingabe exit), ist Ihre Login-Sitzung beendet und die login:Aufforderung wird erneut angezeigt. Sie sind also abgemeldet.