Ich habe eine einfache Shell für Linux erstellt. Es wird zeilenweise mit getline () gelesen, bis ctrl + d (eof / -1) in die Standardeingabe eingegeben wird.
Wenn Sie stdin Zeile für Zeile wie folgt eingeben:
%Vor%Meine Shell funktioniert ziemlich gut.
Ich habe versucht, Skript über meine Shell auszuführen, aber es funktioniert nicht. Wenn ich Skript ausführe, wird meine Shell automatisch ausgeführt (1. Zeile), aber die Shell interpretiert keine anderen Zeilen.
%Vor%Was könnte das verursachen? Ich muss sagen, dass ich sehr Anfänger in Linux bin und Lehrer hat nichts über all das Zeug gesagt. Nur eine Hausaufgabe. Ich habe ein paar Nachforschungen angestellt, aber das ist alles, was ich gefunden habe.
Hier ist der Code meiner Shell. Ich habe Shell-Pfad in etc / Shells hinzugefügt, aber es funktioniert immer noch nicht
%Vor%Ihre Shell muss Befehlszeilenargumente akzeptieren. In diesem Fall wird Ihr Programm wie folgt aufgerufen:
%Vor% Sie brauchen also ein main()
dieser Signatur:
und parse dann die Argumente. argc
enthält die Anzahl der Argumente. Der Dateiname des Skripts wird in argv[1]
übergeben. Sie müssen es öffnen (mit fopen()
) und lesen Befehle von ihm anstelle von stdin
. Sie sollten wahrscheinlich sicherstellen, dass Ihre Shell die erste Zeile einer Datei ignoriert, wenn sie mit einem #
beginnt.
Wenn Ihr Skript ohne absoluten Pfad aufgerufen wird (ein Pfad, der nicht mit /
beginnt), ist der Dateiname relativ zum aktuellen Verzeichnis. Sie können das von der Umgebung oder programmatisch mit getcwd()
bekommen.
Das Problem ist, dass Ihre Shell von der Standardeingabe liest, während ein She-Bang #!
bewirkt, dass das Skript als Befehlszeilenargument übergeben wird. Deine Shell heißt also
... ignoriert das Befehlszeilenargument und wartet auf Befehle der Standardeingabe. Sie müssen das Skript von argv[1]
lesen.