Mit C++ auf Linux console zugreifen?

6 Antworten

Geht es dir um Shell-Befehle?

In dem Fall könntest du dir nen ganzen Haufen arbeit sparen, indem du mit alias und/oder Funktionen arbeitest.

Du könntest z.B. folgendes in die /etc/profile bzw. ~/.profile eintragen:

alias SucheNachDateien='find -name'
DateiNachTmpKopieren() { cp "$1" "/tmp/$(basename $1)" }

und danach (ggf. vorher neu anmelden, die Shell neu starten und/oder die jeweilige Datei neu laden) z.B. mit

SucheNachDateien GanzTolleDatei.xy

im aktuellen Verzeichnis und dessen Unterverzeichnissen nach Dateien mit dem Namen GanzTolleDatei.xy suchen und mit

DateiNachTmpKopieren AndereGanzTolleDatei.xy

AndereGanzTolleDatei.xy nach /tmp/AndereGanzTolleDatei.xy kopieren.

---------------------------------------

Wenn du es aber unbedingt in C/C++ machen willst, dann wäre wohl ein MultiCall-Binary nach BusyBox-Art das Mittel der Wahl. (Siehe auch: man 3 exec)

Definier dir doch einfach ein paar Aliase! Das ist viel sauberer und komfortabler.

alias ehw='echo hello world'

Das kannst du irgendwo speichern (z. B. in ~/.profile) und hast dann immer Zugriff drauf.

Woher ich das weiß:Berufserfahrung
guenterhalt  24.06.2020, 08:05

die ~/.bashrc erscheint für solche Einträge die bessere Lösung zu sein. Nicht alle Linux-Distributionen benutzen die .profile .

0

Die Konsole ist ein Gerät, das kannste einfach öffnen und dann damit arbeiten - je nach Bedarf brauchts noch einige ioctls.

Aber vielleicht willst Du gar nicht auf die Konsole zugreifen - deswegen wäre es gut, wenn Du genauer beschreibst, was Du machen möchtest.

Isendrak hat bereits gezeigt, wie Du Aliases erstellen kannst, um einen (neuen) Befehl auf einen anderen abzubilden. PeterKremsner hat den Weg der Skripte aufgezeigt.

Wenn Du eine eigene Shell (mit Mapping) entwerfen möchtest (weil es halt Spaß macht), dann wirst Du um fork(), exec() und friends nicht herumkommen. Ebenso wenn Du in Deinem Programm nur Ein- und Ausgabe machen willst und Dein Programm 'interaktiv mit der Shell kommuniziert'. Aber Achtung, wenn Du die IO-Kanäle der Shell an Dein Executeable umleitest, ist sie selbst nicht mehr von Haus aus interaktiv - mit allen daraus folgenden Konsequenzen.

Ich weiß nicht, ob es den Befehl in C++ gibt, aber in C kannst du folgendes machen:

system("DeinShellBefehl");

LG

Woher ich das weiß:eigene Erfahrung – Mehrere Jahre Erfahrung mit Computern
MRMINEDE  25.06.2020, 22:10

Edit: Damit greift man nur im Programm auf die Shell zu und kreiert keine neuen Befehle o.ä.!

0

was ist denn an einer Konsole sooo kompliziert?

Wenn du Befehle über system( ) in einem C-Programm ausführen lassen willst, musst du die doch auch irgendwo eintippen und dann die Ergebnisse anzeigen.
Das macht eine Konsole/X-terminal doch schon ausgezeichnet.

Wenn du aber Basisbefehle so als shortcut's haben willst, dann dürften Alias-namen sicher effektiver sein.

alias catp='cat /proc/partitions' 

ist da so etwas.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995
mintkissen  24.06.2020, 00:12

Na toll ... wenn man nach dem Abschicken der eigenen Antwort eine andere findet, die viele Stunden zuvor abgeschickt wurde, und ziemlich genau das Gleiche enthält ...

1
guenterhalt  24.06.2020, 08:03
@mintkissen

so ist das Schicksal. Das hat aber auch Vorteile für den Fragenden (Lesenden) . Wenn mehrere, inhaltlich gleiche Lösungen genannt werden, sollte das ein Zeichen für "Überdenkenswert" sein.
So etwas passiert mir auch, schließlich ließt man erst einmal nur die Frage.
Eine Antwort, die noch nicht abgeschickt wurde, bleibt auch noch im Cache. So kann es passieren, dass Stunden/Tage nach Abschluss (Absenden) der Antwort die dann wie ein Plagiat aussieht.

Es ist aber auch schon passiert, das ein GF-Benutzer eine Antwort mit "Daumen hoch" bewertet, den Text Stunden später als seine Antwort kopiert und dann vom Fragenden auch noch den * erhält. (Das aber aus Zeit, als ein richtiges Gerangel um Punkte Ziel vieler Benutzer war)

0