Wie kann ich BASIC-Code in einem Terminal ausführen?

20

Ich möchte BASIC-Code unter Linux ausführen, wie Sie es früher auf älteren Computern getan haben. (Ich suche einen BASIC Interrupter, der OS-Funktionen nativ ausführen kann)

Welche Möglichkeiten habe ich? (Vorzugsweise für Debian-basierte und Arch-basierte)

DiamondCoderMan
quelle
2
Es gibt viele (nicht wirklich kompatible) Versionen von Basic.
Thomas Dickey
2
@ThomasDickey Ich habe Debian in die Frage gestellt, da es ein Debian-Tag hat / hatte.
Rui F Ribeiro

Antworten:

24

Wenn Sie nativ in Linux BASIC laufen wollen, haben Sie mehrere Pakete in Debian zur Auswahl:

  • Brandy-kompatibles BBC Micro BASIC - arbeitet in einer grafischen X11-Oberfläche und unterstützt offensichtlich Sound und Grafik.

Brandy ist ein Interpreter für BBC BASIC V, den von Acorn Computers gelieferten BASIC-Dialekt, dessen Desktop-Computer den ARM-Prozessor wie Archimedes und Risc PC verwenden. Er wird auf diesen und kompatiblen Computern weiterhin verwendet.

   BASIC V is a much extended version of BBC BASIC. 

Dies war das BASIC, das auf dem 6502-basierten BBC Micro von Acorn in den 1980er Jahren verwendet wurde.

  • Der Textmodus "bwbasic - byWater BASIC" soll ANSI-kompatibel sein, Shells-fähige Erweiterungen aufweisen und in der Lage sein, verschiedene Arten von "alten" BASIC-Dialekten zu emulieren bzw. mit diesen kompatibel zu sein, darunter IBM BASICA, Microsoft BASIC und gwBASIC.

bwBASIC kann so konfiguriert werden, dass Features, Befehle und Funktionen emuliert werden, die für verschiedene Arten von BASIC-Interpretern verfügbar sind.

bwBASIC implementiert eine Funktion, die in früheren BASIC-Interpretern nicht verfügbar ist: Ein Shell-Befehl kann interaktiv an der bwBASIC-Eingabeaufforderung eingegeben werden, und der Interpreter führt ihn unter einer Befehls-Shell aus.
Zum Beispiel kann der Befehl "dir * .bas" in bwBASIC eingegeben werden (unter DOS oder "ls -l * .bas" unter UNIX) und wird ab der Befehlszeile des Betriebssystems ausgeführt.

Shell-Befehle können in einem bwBASIC-Programm auch in nummerierten Zeilen eingegeben werden, sodass bwBASIC als Shell-Programmiersprache verwendet werden kann. Die Implementierung der Befehle und Funktionen RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON und ENVIRON $ () durch bwBASIC bietet weitere Shell-Verarbeitungsfunktionen.

So installieren Sie sie:

sudo apt-get install brandy bwbasic

Was meine persönliche Erfahrung betrifft, bevorzuge ich es, bwbasicda es die Leistung von BASIC in einer Textbefehlszeile oder einem Shell-Skript ermöglicht.

Alternativ haben Sie auch mehrere Emulationspakete von Computern der alten Generation, die offensichtlich neben der BASIC-Syntax die gesamte Umgebung eines alten Computers implementieren, den Sie möglicherweise noch einmal erleben möchten.

Interessanterweise bwbasickönnte theoretisch die Automatisierung von Operationen in Unix ermöglicht werden, z. B. das Erstellen von Skripten mit der BASIC-Sprache. Ich habe es aber nie ausprobiert.

Rui F Ribeiro
quelle
9

Meine Debian-Systeme und wahrscheinlich die meisten anderen Linux-Distributionen haben mehrere Möglichkeiten, die direkt über den Paketmanager verfügbar sind. Darunter:

  • bwbasic:

Der Bywater BASIC Interpreter (bwBASIC) implementiert eine große Obermenge des ANSI-Standards für Minimal BASIC (X3.60-1978) und eine signifikante Untermenge des ANSI-Standards für Full BASIC (X3.113-1987) in C. Er bietet auch Shell Programmiermöglichkeiten als Erweiterung von BASIC. bwBASIC möchte so portabel wie möglich sein.

  • sdlbasic:

sdlBasic ist ein kleiner, effizienter und plattformübergreifender BASIC-Interpreter zum Erstellen von Spielen mit der Leistungsfähigkeit der SDL-Bibliothek. Es wurde von dem alten und ruhmreichen AMOS inspiriert.

Homepage (Referenzhandbuch)

Wikipedia

Alex Stragies
quelle
8

Da anscheinend alle davon ausgehen, dass Sie mit "älteren Computern" "Vor-IBM-PC" meinen, gehe ich den anderen Weg und biete eine Antwort an, die "ältere Computer" als "IBM-kompatibel vor Windows 9x" interpretiert.

Wenn Sie Computer meinten, auf denen Versionen von MS-DOS ausgeführt werden, QBASIC.EXEstehen Ihnen drei Optionen zur Verfügung, je nachdem, wie genau Sie die Ausführung unter Linux definieren:

  1. Wenn Sie noch eine Version von QBASIC.EXEkicking around haben, können Sie DOSBox oder DOSEMU verwenden , um sie in einer virtualisierten DOS-Umgebung auszuführen. (Beide sind in Debians Repositorys verfügbar und einfach einzurichten. Legen Sie einfach einen Ordner fest, der gemountet werden soll C:, und legen QBASIC.EXESie ihn ab. Sie können loslegen.)

    Das gibt Ihnen eine perfekte Kompatibilität mit altem Quellcode, aber keine Integration mit dem Host-Betriebssystem über " C:ist eigentlich ein Ordner und kein Festplatten-Image" hinaus.

    Ich sollte jedoch klarstellen, dass es einen Kompromiss zwischen den beiden gibt. DOSEMU kann auf jedem beliebigen Terminal ausgeführt werden, unterstützt jedoch nicht die ausgefallenen Low-Level-Tricks einiger QBasic-Produkte (z. B. für spezielle Grafikmodi). Die einzige Möglichkeit, dies zu unterstützen, ist ein vollständiger Emulator wie DOSBox. DOSBox öffnet jedoch ein eigenes Fenster, anstatt Ihr Terminal zu verwenden.

  2. FreeBASIC verfügt über einen qbDialekt / Modus, der auf perfekte Kompatibilität mit einer großen Teilmenge von QuickBASIC abzielt . (Bei den nicht unterstützten Inhalten handelt es sich hauptsächlich um Low-Level-Inhalten, die mit der Tatsache zusammenhängen, dass QuickBASIC ein 16-Bit-Real-Mode-System war, während FreeBASIC ein 32-Bit-Protected-Mode-System ist.)

    FreeBASIC bietet Linux-Binärdateien, die Sie jedoch nur dann in Ihrem Paket-Repository finden, wenn Sie tatsächlich "Debian-family distros" anstelle von "Debian" meinten und Ubuntu oder ein Ubuntu-Derivat wie Mint ausführen.

  3. Die Linux-Builds von QB64 sind noch nicht einmal in den Ubuntu-Repositories enthalten, aber es ist speziell darauf ausgerichtet, der kompatibelste QuickBASIC-Nachfolger im geschützten Modus zu sein, und es wird sogar eine IDE bereitgestellt, die versucht, die QBasic / QuickBasic-IDE zu klonen.

ssokolow
quelle
8

Sie haben in einem Kommentar zu Foons Antwort geschrieben, dass

Was ich mit "wie alte Computer" meine, ist, dass es einfach da ist

Andere haben verschiedene Vorschläge für BASIC-Interpreter gemacht, die Sie auf einem Linux-System installieren können. Moderne PCs verfügen im Allgemeinen nicht über integrierte BASIC-Interpreter, sodass Sie nicht mehr mit etwas booten können, auf dem ein installierter BASIC-Interpreter ausgeführt werden kann.

Ich werde das Obige eher so verstehen, dass Sie etwas wollen, das einen BASIC-Interpreter automatisch startet, ähnlich wie die frühen Mikrocomputer (z. B. Apple II, Commodore C-64, Zinclair ZX-81 und andere) ) in einen nativen BASIC-Interpreter gebootet.

Grundsätzlich gibt es drei Möglichkeiten, dies zu tun:

Erstellen Sie einen Desktop-Starter, der ein Terminal öffnet

Dies ist die am wenigsten invasive Methode, da sie vollständig in dem System und der Umgebung funktioniert, an die Sie gewöhnt sind.

Grundsätzlich erstellen Sie mit den Mitteln, die Ihre Desktop-Umgebung bietet, einen Programmstarter und richten ihn so ein, dass der BASIC-Interpreter Ihrer Wahl in einem Terminal gestartet wird. Für zusätzlichen Effekt können Sie bestimmte Schriftarten, Farben usw. einstellen, um eine Umgebung vergangener Tage zu simulieren. Wie Sie dies genau tun, hängt von der verwendeten Desktop-Umgebung ab, die Sie nicht angegeben haben. Wenn Sie jedoch mit der rechten Maustaste auf die Stelle klicken, auf die Sie gerade klicken, um Anwendungen zu starten, und nach einer Auswahl zum Erstellen eines neuen Startprogramms suchen, ist dies ein guter Anfang .

Erstellen Sie ein separates Benutzerkonto mit einem BASIC-Interpreter als Shell

Dies ist etwas aufwändiger als ein einfacher Desktop-Launcher, bietet jedoch eine bessere Isolation, sodass Sie nicht riskieren, Ihre eigenen Dateien durcheinander zu bringen. Installieren Sie zunächst einen BASIC-Interpreter. Ich werde bwbasicfür das Beispiel verwenden, aber alles geht, wirklich, solange es nativ in einem Terminal läuft. Fügen Sie dann einen Benutzer hinzu und legen Sie dessen Shell als bwbasic-Interpreter fest. Dies kann über die grafische Benutzeroberfläche erfolgen. Dies hängt jedoch von der verwendeten Desktop-Umgebung ab. Der tragbare Ansatz besteht darin, dies in einem Terminal unter Verwendung von useradd. Dies wird etwas ähnliches sein

$ sudo -i
# grep -q "$(type -pP bwbasic)" /etc/shells || echo "$(type -pP bwbasic)" >>/etc/shells
# useradd --home /home/basic --create-home --shell "$(type -pP bwbasic)" basic

Dann sollten Sie in der Lage sein, über sudo eine saubere BASIC-Umgebung aufzurufen:

$ sudo -i -u basic

Sie können einen Starter (wie oben) erstellen, der diesen Befehl in einem Terminal ausführt, wenn Sie möchten.

Geben Sie Ihr normales Passwort ein, wenn Sie von sudo dazu aufgefordert werden. Sie können die sudoers-Konfiguration bearbeiten, um die Kennworteingabeaufforderung bei Bedarf zu vermeiden. Beachten Sie jedoch, dass das Bearbeiten von sudoers etwas kompliziert und vor allem riskant ist. Sie könnten sich aus dem Root-Konto ausschließen, was die Reparatur der Konfiguration ziemlich schwierig macht.

Verwenden Sie einen BASIC-Interpreter als Init

Dies ist der invasivste Ansatz, bringt Sie aber auch der Funktionsweise früherer Mikrocomputer am nächsten, indem Sie direkt in einen BASIC-Interpreter booten. Ich empfehle dies nicht und halte es für unwahrscheinlich, dass es ohne nennenswerte Arbeit funktioniert, schließe es jedoch der Vollständigkeit halber ein.

Der Linux-Kernel akzeptiert einen Befehlszeilenparameter (ja, der Linux-Kernel verfügt über Befehlszeilenparameter; Sie können die aktuell gebootete Befehlszeile durch Lesen von / proc / cmdline anzeigen) init, der angibt, welches Programm ausgeführt werden soll, sobald die Kernel-Initialisierung abgeschlossen ist. Sie können den Bootloader (höchstwahrscheinlich GRUB) so konfigurieren, dass Sie einen Kerneleintrag booten können, der angibt, dass dies der initFall sein soll /usr/bin/bwbasic(oder welcher andere installierte BASIC-Interpreter auch immer).

Damit dies funktioniert, müssen sich der BASIC-Interpreter sowie alle erforderlichen Dateien im root ( /) -Dateisystem befinden. Dies liegt daran, dass eine der Aufgaben von init darin besteht, alle Dateisysteme bereitzustellen, und dass die Nicht-Root-Dateisysteme nicht bereitgestellt wurden, weil Sie ein Nicht-Init-Programm als Init bereitstellen. (Ich glaube, eine weitere Aufgabe von init besteht darin, das Root-Dateisystem im Lese- / Schreibmodus erneut bereitzustellen, sodass Sie aufgrund des trivialen Ansatzes nichts speichern können. Abhängig von den genauen Implementierungsdetails ist dies jedoch möglich lass das system sowas ausführenmount -o remount,rw / Zum erneuten Einhängen des Root-Dateisystems mit Lese- und Schreibzugriff.) Der von Ihnen gewählte BASIC-Interpreter darf auch nicht von etwas anderem abhängig sein, für das init verantwortlich ist, und Sie haben keinen Zugriff auf Funktionen, die von init oder von init (z. B.) hervorgerufenen Prozessen ausgeführt werden , Netzwerk- oder Mehrbenutzerunterstützung).

Eine Kernel-Kommandozeile von so etwas ro quiet init=/usr/bin/bwbasicwird Sie wahrscheinlich in die Nähe bringen, wie es früher ausgesehen hat.

ein CVn
quelle
Ihre Verwendung von sudo echotut nicht das, was Sie meinen, und es ist wahrscheinlich, dass Sie -bash: /etc/shells: Permission deniedtrotzdem auf eine stoßen, da die >>Umleitung von bash eingerichtet wird, bevor der Rest des Befehls ausgewertet wird. Es ist wahrscheinlich am besten, type -P bwbasic | sudo tee -a /etc/shellsstattdessen zu verwenden . Siehe " Berechtigungen - So fügen Sie Text mit sudo in eine Root-Datei ein? - Unix & Linux Stack Exchange
shalomb
@shalomb Guter Punkt, danke für die Erwähnung. Ich habe das behoben, aber auf eine etwas andere Art und Weise.
ein CVn
1
@ MichaelKjörling Eine weniger drastische Alternative zur Verwendung eines BASIC-Interpreters initwäre, das Init-System so zu konfigurieren, dass es bwbasicanstelle agettyeines X11-Display-Managers verwendet und nicht gestartet wird. (Für andere, die nicht wissen, wovon ich spreche, stellt der Kernel verschiedene "virtuelle Konsolen" zur Verfügung, die über Strg + Alt + F1 bis Strg + Alt + F12 zugänglich sind, und das Init-System startet standardmäßig agettymit 1 bis 6 und ein X11-Display-Manager (der ein Anmeldedialogfeld bereitstellt) unter 7. Vor Upstart und systemd wurde dies über gesteuert /etc/inittab.) gettyund seine Nachkommen verarbeiten Anmeldeaufforderungen für die Konsole.
ssokolow
@ssokolow Der Vollständigkeit halber eine gute Idee, aber zu diesem Zeitpunkt sind Sie einem dedizierten Benutzerkonto mit einer bwbasic-Shell nur einen Schritt voraus, daher glaube ich nicht, dass dies wirklich viel Abwechslung bringt.
einen Lebenslauf vom
4

Nur um eine Alternative zu werfen: es mehrere Emulatoren für Linux sind , die können laufen Ihre alten Computer. Wenn Sie beispielsweise mit xkegs booten, sollte eine AppleSoft-Eingabeaufforderung auf Sie warten. Die Kommunikation mit anderem Linux - Zeug ist eine Übung des Leser überlassen (Hinweis: technisch, ich glaube , Sie Ausgabe in Ihrem emulierten Apfel auf den emulierten Drucker umleiten können, die xkegs wird dann als Netzwerk - Socket zu , die Sie zum Beispiel benutzen können nc zu Einspeisung in Einige andere Piping-Anwendungen usw. Sie sind sich nicht sicher, ob es einen anderen Weg gibt. Ich würde erwarten, dass die Commodore 64-Emulatoren auf ähnliche Weise Commodore Basic usw. ausführen können.

Foon
quelle
Ja, es gibt viele Emulatoren, die leicht in Debian installiert werden können, aber kegsanscheinend keiner von ihnen (kein apt-cache searchErgebnis). Und für einige / die meisten Emulatoren benötigen Sie wahrscheinlich irgendwo ein Original-ROM.
Alex Stragies
Vielleicht möchten Sie auch Ihre Antwort bearbeiten, um auf einen Emulator zu verweisen, der in einem Terminal ausgeführt werden kann (OP hat Q in der Vergangenheit bearbeitet)
Alex Stragies
Was ich mit "wie alte Computer" meine, ist, dass es gerade da ist
DiamondCoderMan
1
@DiamondCoderMan Sie können ein Benutzerkonto einrichten, das anstelle von bash so etwas wie bwbasic, brandy oder sdlbasic als Shell verwendet. Unter Linux ist dies wahrscheinlich das Beste, was Sie praktisch an ein System heranführen können, das wie alte Mikrocomputer funktioniert, die einen BASIC-Interpreter gestartet haben. Sie könnten auch so etwas wie init=/usr/bin/sdlbasicden Linux-Kernel übergeben, was Sie , wenn es funktioniert , viel näher bringt, aber es kann funktionieren oder auch nicht.
ein CVn
1

Es gibt viele Alternativen. Mein Vorschlag ähnelt der Antwort von ssokolow. Wenn Sie ein "modernes" BASIC wollen, aber eine ähnliche Syntax wie die alten BASIC-Interpreter haben, sollten Sie es mit BaCon versuchen. Es ist ein BASIC-Transpiler, der nativen Code generiert. Das Projekt hat ein ziemlich gutes Handbuch, viele Bibliotheken und Beispiele und sogar eine in BaCon geschriebene IDE.

Bildbeschreibung hier eingeben

Rufo El Magufo
quelle
Dies ist jedoch nicht für das Terminal bestimmt
DiamondCoderMan
Der Transpiler arbeitet im Terminal. Es ist klein und verwendet einen C-Compiler, um die ausführbare Datei zu erstellen. Die IDE war nur ein Beispiel für die Leistungsfähigkeit des Projekts.
Rufo El Magufo
-2

Sie können einen C64 in Ihrem Browser ausführen und auf diese Weise BASIC verwenden.

http://codeazur.com.br/stuff/fc64_final/

Beachten Sie, dass das Tastaturlayout anders ist, Shift-2z. B. für Anführungszeichen.

http://jilltxt.net/wp-content/uploads/C64-keyboard-layout.png

Wenn Sie Applesoft BASIC bevorzugen, http://calormen.com/jsbasic/

Es sind Emulatoren anderer Computer online,
aber viele von ihnen gehen direkt zu dem Programm, das Sie laden,
ohne die anfängliche Tastatureingabe zu emulieren, die erforderlich ist, um dorthin zu gelangen.

Doyousketch2
quelle
1
Wie ist dies "in einem Terminal", wenn Sie es in einem Javascript-basierten Webbrowser-Emulator ausführen?
Wyatt8740
3
Der Teil "In einem Terminal" ist im Titel der Frage
Roaima
1
@ Doyousketch2 Schau dir den Titel etwas genauer an. i.imgur.com/jDBZVEO.png
Wyatt8740,
1
Es war sogar im ersten Revisionstitel, der lautete, wie man BASIC-Code in einem BASH-Terminal ausführt?
einen Lebenslauf vom
2
Wenn es sich um Software für ein C64- oder ein anderes 8-Bit-System handelt, ist es in der Tat die beste Idee, eine ganze Maschine zu emulieren - nur wenige nicht triviale Basisprogramme aus dieser Zeit geben im geringsten vor, hardwareunabhängig zu sein!
Rackandboneman