it-swarm.com.de

Terminal gegen Bash?

Ich bin auf einem Mac, aber ich denke, dass dies im Allgemeinen für Unix gilt.

Ich bin gerade dabei, Shell-Skripte zu lernen, und es scheint etwas zu fehlen. Wenn ich mich im normalen Terminal befinde, kann ich Skriptsyntax wie for-Schleifen und dergleichen in Verbindung mit Befehlen verwenden, um Dinge zu erledigen.

Aber ....bash öffnet einen Interpreter für Shell-Skripte.

Wo bin ich verwirrt, weil das Terminal nicht bereits ein Interpreter für Shell-Scripting ist, wie die Tatsache zeigt, dass das Scripting funktioniert, wenn es an stdin übergeben wird?

Bonusfrage: Wie unterscheidet sich bash von bash -i, was laut man "eine interaktive Sitzung startet" ..... passiert das nicht, wenn Sie einfach bash alleine eingeben? Was für mich nicht anders ist, als überhaupt im normalen Terminal zu sein ...

30

Wenn Sie ein Terminal starten, wird immer ein Programm darin ausgeführt. Dieses Programm ist im Allgemeinen standardmäßig Ihre Shell. Unter OS X ist die Standard-Shell Bash. In Kombination bedeutet dies, dass beim Starten von Terminal ein Terminalemulatorfenster mit bash darin angezeigt wird (standardmäßig).

Sie können ändern Sie die Standard-Shell auf etwas anderes, wenn Sie möchten, obwohl OS X nur mit bash und tcsh geliefert wird. Sie können einen benutzerdefinierten Befehl in einem neuen Terminal mit dem Befehl open starten:

open -b com.Apple.terminal somecommand

In diesem Fall wird Ihre Shell nicht Darin ausgeführt, und wenn Ihr benutzerdefinierter Befehl beendet wird, ist dies das Ende der Dinge.

Wenn Sie bash in Ihrem Terminal ausführen, auf dem bereits bash ausgeführt wird, erhalten Sie genau das: Eine Shell führt eine andere aus. Sie können die innere Shell mit verlassen Ctrl-D oder exit und Sie kehren zu der Shell zurück, in der Sie begonnen haben. Dies kann manchmal nützlich sein, wenn Sie Konfigurationsänderungen testen oder Ihre Umgebung vorübergehend anpassen möchten - wenn Sie die innere Shell verlassen, die vorgenommenen Änderungen geh damit weg. Sie können sie beliebig tief verschachteln. Wenn Sie das nicht tun, macht es keinen Sinn, einen anderen zu starten, sondern einen Befehl wie bash some-script.sh führt nur dieses Skript aus und beendet es dann, was oft nützlich ist.


Die Unterschiede zwischen interaktiven und nicht interaktiven Shells sind etwas subtil und betreffen hauptsächlich, welche Konfigurationsdateien geladen werden, welches Fehlerverhalten vorliegt und ob Aliase und ähnliches aktiviert sind. Das grobe Prinzip ist, dass eine interaktive Shell Ihnen die Einstellungen bietet, die Sie für das Sitzen davor wünschen, während eine nicht interaktive Shell Ihnen die gewünschten Einstellungen für ein eigenständiges Skript bietet. Alle Unterschiede sind explizit im Bash Reference Manual und auch in eine spezielle Frage auf dieser Site dokumentiert.

Zum größten Teil brauchen Sie sich nicht darum zu kümmern. Es gibt nicht oft einen Grund, eine andere Shell zu starten, und wenn Sie dies tun, haben Sie einen bestimmten Zweck im Auge und wissen, was Sie damit tun sollen.

31
Michael Homer

Die Maschine in diesem Bild ist ein (Video) Terminal , genauer gesagt ein VT1 von - Digital Equipment Corporation.

VT100 terminal from Wikipedia

Vor Jahrzehnten, als Computer groß waren, hätten sie anstelle von PCs für jeden Benutzer ein Terminal haben können, ein Dummy-Gerät mit Display und Tastatur, das über ein Kabel mit einem Hauptcomputer verbunden ist. Ein VT100 ist kein Computer, sondern nur eine Tastatur und ein Display. Normalerweise waren mehrere davon an einen einzigen Computer angeschlossen.

So wurde vor Jahrzehnten auf einen Unix-Computer über ein Terminal zugegriffen, das ein physisches Gerät war. Als der Personal Computer hinzukam und grafische Benutzeroberflächen alltäglich wurden, gab (und gibt) es eine Möglichkeit, auf die Unix-Befehlszeile zuzugreifen, als ob sie von einem solchen Endgerät verwendet würde - Anwendungen, die als Terminalemulator bezeichnet werden . Das Terminalprogramm in OS X ist ein Terminalemulator. Die meisten Terminalemulatoren der heutigen Zeit emulieren immer noch dasselbe VT100-Gerät ziemlich genau, dh die meisten Programme, die in einem Fenster der Anwendung Terminal ausgeführt werden, sehen genauso aus, wie sie aussehen würden, wenn sie im großen Stil ausgeführt würden Computer der 70er Jahre und die auf einem solchen Endgerät angezeigten Daten. Für die Programme verhält sich das Fenster each in Ihrem Terminalemulator wie eines dieser Geräte. Die meisten Befehlszeilenprogramme konnten keinen Unterschied feststellen (obwohl es schwierig sein könnte, einen echten VT100 an Ihren MBP anzuschließen).


Ein Videoterminal war der Nachfolger eines Geräts, das als Hardcopy-Terminal bezeichnet wurde und über eine Tastatur und einen Drucker verfügte. Alle Ausgaben von Programmen wurden stattdessen auf Papier gedruckt. Man kann sich vorstellen, dass ein Videoterminal eine große Verbesserung gegenüber solchen Geräten darstellt. Ein Beispiel für ein Hardcopy-Terminal, ein TeleType Model 33 ASR:

TeleType Model 33 ASR

Dieses Gerät wurde auch Teletypewriter, Teletyper oder tty kurz genannt; und die tty stecken aus den frühen 70ern, und die Schnittstelle für ein solches Gerät oder einen Terminalemulator wird immer noch als tty bezeichnet, und zwar in vielen Programmiersprachen Die Ausgabe von Text zur Anzeige in einem Terminalfenster wird weiterhin als "Drucken" bezeichnet. ursprünglich war es keine Metapher, sondern eine Tatsache.


Die Shell war schon immer da - seit Beginn von Unix war es das Programm, das ausgeführt wurde, nachdem Sie Ihren Anmeldenamen und Ihr Kennwort auf dem Terminal eingegeben hatten, um auf den zentralen Computer zuzugreifen. Das erste Shell-Programm war das Thompson Shell (sh) von 1971, das 1977 von Bourne Shell abgelöst wurde, auch sh genannt . Schon früh war es so konzipiert, dass dies nur ein weiteres Programm war, das leicht aktualisiert werden konnte und dass Benutzer ihr eigenes Programm anstelle der Standard-Shell ausführen konnten.

Das GNU -Projekt produzierte dann von Grund auf eine verbesserte Shell namens bash, kurz für Bourne-again Shell , mit der Apple ausgeliefert werden sollte MacOS X auch.


In den 1970er Jahren war die Unterscheidung klar: Ein Terminal bestand aus einem 30 kg schweren Stück massivem Gusseisenrahmen, der in eine cremefarbene Kunststoffhülle mit einem Glasdisplay und einer Tastatur vor Ihnen eingewickelt war, oder sogar einem Gerät mit nur einer Tastatur und Drucker, während eine Shell ein Programm war, das auf dem Hauptcomputer ausgeführt wurde und Ihre Befehle interpretierte.

35
Antti Haapala

Sie vermissen, dass auf Ihrem Terminal bereits bash (oder ein anderer Shell-Interpreter) ausgeführt wird.

Ein Terminal und genauer gesagt ein Terminalemulator in Ihrem Fall ist nur ein Gerät, das Tastenanschläge an ein zugrunde liegendes Programm übergibt und alle an dieses gesendeten Zeichen anzeigt. Während standardmäßig eine Shell ausgeführt wird, verbietet nichts, ein Terminal zu starten, auf dem eine andere Textanwendung ausgeführt wird, z. B. ein Texteditor oder was auch immer.

Wenn Sie sich bereits in einer interaktiven Sitzung befinden, würde das Ausführen von bash und bash -i In der Tat keinen Unterschied machen.

8
jlliagre