Erstellen einer angepassten Shell - C ++, Linux, Bash, Shell, Unix

Ich habe eine benutzerdefinierte Shell in C ++ erstellt. Gegenwärtig ist die Shell als eine unendliche while-Schleife entworfen, die gestartet wird, indem die entsprechende ausführbare Datei vom Terminal aus ausgeführt wird (ich benutze Ubuntu als mein Betriebssystem). Die Shell implementiert einige neue Befehle, die jeweils als separate ausführbare Dateien im Dateisystem gespeichert sind. Der Rest der vom Benutzer eingegebenen Befehle wird direkt mit dem Befehl ausgeführt execve() Wrapperfunktion.

Im Wesentlichen führe ich alle Benutzerbefehle aus, indem ich die execve () - Funktion verwende: die angepassten Befehle werden als separate fähige Dateien gespeichert und sind "execed ", indem der Pfad zur ausführbaren Datei angegeben wird, während jeder andere" standardmäßige "Unix-Befehl direkt ausgeführt wird execed.

Anstatt es als separate ausführbare Datei auszuführen bash, Ich möchte Lass den Benutzer meine Shell benutzen Das wird auf dem Terminal ausgeführt. Wie kann ich das machen?

Ich habe auf folgende Links hingewiesen:

Prozesse und Sitzungen und Controlling Terminals

Erstellen einer UNIX-Shell

Ich bin jedoch nicht in der Lage, die Links wie die Verbindung zwischen einem kontrollierenden Terminal und der Shell usw. zu erkennen. Jede Hilfe wäre in dieser Hinsicht willkommen.

AKTUALISIEREN:

Dies mag ein wenig unlogisch klingen, aber:

Gibt es eine Möglichkeit, es als Benutzerbefehl zu implementieren, den der Benutzer von der aktuellen Shell ausführen kann? Ich weiß, dass es einen Befehl namens chsh ... gibt, aber funktioniert es mit meiner Shell?

Antworten:

1 für die Antwort № 1

Zuerst kannst du deine Shell mit bash testen exec yourshell. Dies ersetzt Der Bash-Prozess mit Ihrer Shell ganz. (Wenn Sie Ihre Shell verlassen, wird das Terminal damit beendet / abgemeldet.)

Sie können auch laufen xterm -e yourshell um einen xterm mit deiner Shell statt bash zu starten.

Wenn du es dauerhaft zu deiner Standard-Shell machen willst:

  1. Fügen Sie Ihre Shell zur Liste der System-Shells hinzu. /etc/shells
  2. Ändern Sie die Login-Shell Ihres Benutzers mit chsh
  3. Melden Sie sich wieder ab und wieder an