Hi, wollte mal fragen, ob es möglich ist eigene Konsolenbefehle zu gestalten. Also, wenn ich z.b. kcalc eingebe, öffnet sich ja der Rechner. Wenn ich 'Cube' starten will muss ich jedoch jedes Mal 'cd games; ./linux_client -w1024 -h768' eingeben bzw. es im Verlauf suchen... Kann man so etwas vllt mit einem Script automatisieren?
Hallo Patrick, On Sun, 30 Nov 2003 at 14:09 (+0100), patrick dahl wrote:
wollte mal fragen, ob es möglich ist eigene Konsolenbefehle zu gestalten. Also, wenn ich z.b. kcalc eingebe, öffnet sich ja der Rechner. Wenn ich 'Cube' starten will muss ich jedoch jedes Mal 'cd games; ./linux_client -w1024 -h768' eingeben bzw. es im Verlauf suchen...
Kann man so etwas vllt mit einem Script automatisieren?
Klar! Nimm Deinen Lieblingseditor und erstelle eine Datei $HOME/bin/cube: #!/bin/sh cd /path/to/games exec ./linux_client -w1024 -h768 $* Die Zeile "#!" muss dabei ganz am Anfang stehen, damit das Betriebssystem weiß, dass es sich bei der Datei um keine Binärdatei sondern um ein Skript handelt, das über den Interpreter /bin/sh (die Shell) abgearbeitet wird. Zum Schluss machst Du die Datei noch ausführbar mit chmod 755 $HOME/bin/cube Mehr Infos: http://www.koehntopp.de/kris/artikel/unix/shellprogrammierung/ Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ "Mankind invented the atomic bomb, but no mouse would ever construct a mousetrap." -- Albert Einstein
Am Son, 2003-11-30 um 13.14 schrieb Bernhard Walle:
Nimm Deinen Lieblingseditor und erstelle eine Datei $HOME/bin/cube:
#!/bin/sh
cd /path/to/games exec ./linux_client -w1024 -h768 $*
Die Zeile "#!" muss dabei ganz am Anfang stehen, damit das Betriebssystem weiß, dass es sich bei der Datei um keine Binärdatei sondern um ein Skript handelt, das über den Interpreter /bin/sh (die Shell) abgearbeitet wird.
Zum Schluss machst Du die Datei noch ausführbar mit
chmod 755 $HOME/bin/cube
Mehr Infos: http://www.koehntopp.de/kris/artikel/unix/shellprogrammierung/
Gruß, Bernhard
Danke, das mit dem shell-Script lief auf anhieb. Habe in /bin/cube.sh folgendes erstellt: --- #!/bin/sh cd .. cd .. cd home/foxy/games exec ./linux_client -w1024 -h768 $* --- 'cd ..', weil ich aus /bin/cube rauskommen musste. Vlle mal noch zwei Verständnis-Fragen: Was bedeutet hier '$HOME' und ist '$*' z.B. vergleichbar mit einem 'end.' in Delphi? ;)
Hallo Patrick, hallo Bernhard, hallo Leute, Am Sonntag, 30. November 2003 15:45 schrieb patrick dahl:
Am Son, 2003-11-30 um 13.14 schrieb Bernhard Walle:
Nimm Deinen Lieblingseditor und erstelle eine Datei $HOME/bin/cube:
#!/bin/sh
cd /path/to/games exec ./linux_client -w1024 -h768 $* [...] Danke, das mit dem shell-Script lief auf anhieb. Habe in /bin/cube.sh
Dort sollte es eigentlich nicht liegen. /bin ist für grundlegende Programme gedacht, nicht aber Scripte, um ein Spiel zu starten. Geschickter wäre /usr/local/bin/ (für systemweit verfügbare eigene Scripte) oder $HOME/bin/ (für Scripte, die nur ein User nutzt) $HOME ist übrigens nix anderes als Dein Homeverzeichnis, also /home/irgendwer/ Überprüfen kannst Du das auch mit echo $HOME
#!/bin/sh
cd .. cd .. cd home/foxy/games exec ./linux_client -w1024 -h768 $* ---
'cd ..', weil ich aus /bin/cube rauskommen musste.
Du könntest auch einfach cd /home/foxy/games ausführen, also mit "/" am Anfang des Verzeichnisnamens.
[...] ist '$*' z.B. vergleichbar mit einem 'end.' in Delphi? ;)
Ich kenne Delphi nicht, aber mit "end" hat das wohl nix zu tun. $* enthält alle Parameter, mit denen das Script aufgerufen wurde. Wenn Du das Script also mit cube x y z aufrufst, steht in $* der Text x y z Da fällt mir gerade auf: Du solltest Dir lieber die Verwendung von "$@" angewöhnen (_mit_ den Anführungszeichen!), damit die Parameter einzeln bleiben und trotzdem keine Probleme mit Leerzeichen in einem Parameter auftreten. Beispiel: cube a "b c" d Damit gibt es 3 Parameter: - a - b c (mit dem Leerzeichen, aber ohne die Anführungszeichen, die werden von der bash entfernt) - d Mit dem Aufruf (innerhalb Deines Scripts) testscript $* splittest Du den zweiten Parameter auf, sodass testscript dann 4 (!) Parameter sieht, nämlich a, b, c und d. Wenn Du testscript "$*" aufrufst, werden alle Parameter zu einem. testscript sieht dann a b c d als _einen_ Parameter. Nur die Lösung mit testscript "$@" gibt die Parameter fehlerfrei weiter. An einzelne Parameter kommst Du übrigens mit echo "$1" für den ersten Parameter. Entsprechend "$2" für den zweiten usw. Lesetip: man bash (keine Angst, musst Du nicht komplett lesen ;-) Dort nach ^ *Special parameters suchen, also /^ *Special parameters und Return eintippen. Raus kommst Du übrigens mit "q". Gruß Christian Boltz -- Zeitreisen vermeide ich immer, sollen irgendwie ungesund sein. [Helga Fischer in suse-linux]
Am Sonntag, 30. November 2003 23:43 schrieb Christian Boltz:
Hallo Patrick, hallo Bernhard, hallo Leute,
Am Sonntag, 30. November 2003 15:45 schrieb patrick dahl: ...
[...] ist '$*' z.B. vergleichbar mit einem 'end.' in Delphi? ;)
Ich kenne Delphi nicht, aber mit "end" hat das wohl nix zu tun.
Nö, hat es nicht. Soetwas wie "end." gibt es in der Bash nicht. Generell sind mir (wenn auch recht kleinen Überblick bzw. meistens von C inspirierte Sprachen) keine anderen Sprachen als (Objekt-)Pascal bekannt, die so typisiert sind, dass das Ende von allem angegeben werden muss. "end" gibt es übrigens garnicht... ;-) Ferdinand
$* enthält alle Parameter, mit denen das Script aufgerufen wurde.
Am Montag, 1. Dezember 2003 00:12 schrieb Ferdinand Ihringer: [...]
Nö, hat es nicht. Soetwas wie "end." gibt es in der Bash nicht.
Lüge ;) if ... fi case ... esac while ...; do done for ...; do done Alles *end.* bzw. *end* im neuen Gewand
Generell sind mir (wenn auch recht kleinen Überblick bzw. meistens von C inspirierte Sprachen) keine anderen Sprachen als (Objekt-)Pascal bekannt, die so typisiert sind, dass das Ende von allem angegeben werden muss. "end" gibt es übrigens garnicht... ;-)
Doch, natürlich. <IIRC-Modus>Es gibt ein *end.* am Abschluss und ein *end* ohne Punkt, z. B. in if - else - Konstrukts vor dem else. BTW: auch in C gibts ein *end* - nur heisst es da *}* und kann manchmal entfallen (wie in Pascal, da ist es der geliebte Punkt). </IIRC-Modus> Jan
Mal wegen Webmail schlecht zitiert: <zitat> Am Montag, 1. Dezember 2003 00:12 schrieb Ferdinand Ihringer: [...]
Nö, hat es nicht. Soetwas wie "end." gibt es in der Bash nicht. Lüge ;) if ... fi case ... esac while ...; do done for ...; do done
Alles *end.* bzw. *end* im neuen Gewand </zitat> Die Beispiele sind alles "end;" und nicht "end.". "end." kommt pro Datei soweit ich weiß nur einmal vor. <zitat>
Generell sind mir (wenn auch recht kleinen Überblick bzw. meistens von C inspirierte Sprachen) keine anderen Sprachen als (Objekt-)Pascal bekannt, die so typisiert sind, dass das Ende von allem angegeben werden muss. "end" gibt es übrigens garnicht... ;-) Doch, natürlich. Es gibt ein *end.* am Abschluss und ein *end* ohne Punkt, z. B. in if - else - Konstrukts vor dem else. BTW: auch in C gibts ein *end* - nur heisst es da *}* und kann manchmal entfallen (wie in Pascal, da ist es der geliebte Punkt). </zitat>
Ein } in C ist doch übertragen auf Pascal eher "end;" oder "end" und nicht "end.". Oder soll man das EOF als "end." betrachten? ;-) Ich wüsste nichts vergleichbares... Ferdinand Alles *end.* bzw. *end* im neuen Gewand ________________________________________ http://www.epost.de - das Kommunikationsportal der Deutschen Post
patrick dahl schrieb:
wollte mal fragen, ob es möglich ist eigene Konsolenbefehle zu gestalten. Also, wenn ich z.b. kcalc eingebe, öffnet sich ja der Rechner. Wenn ich 'Cube' starten will muss ich jedoch jedes Mal 'cd games; ./linux_client -w1024 -h768' eingeben bzw. es im Verlauf suchen...
Kann man so etwas vllt mit einem Script automatisieren?
Was Du suchst, ist vermutlich ein sog. Alias. Du kannst diesen Alias in ~/.alias eintragen. Das ist eine ganz normale Datei, die wiederum in z.B. ~/.bashrc eingelesen wird. Das ist die lokale Konfigurationsdatei fuer Deine Standardshell, die bash. Wie so ein Alias genau auszusehen hat, kannst Du z.B. in "man bash", Abschnitt Aliases nachlesen. In Deinem Falle sollte es z.B. ein alias Cube='/pfad/zum/programm/linux_client -w1024 -h768' tun. Diese Zeile muesstest Du entsprechend angepasst in die genannte Datei schreiben. Wenn Du nun eine neue Shell aufmachst, kannst Du Dein Programm einfach durch Eingabe von "Cube" starten. CU, Thomson
Am Son, 2003-11-30 um 13.28 schrieb Thomas Hertweck:
Was Du suchst, ist vermutlich ein sog. Alias. Du kannst diesen Alias in ~/.alias eintragen. Das ist eine ganz normale Datei, die wiederum in z.B. ~/.bashrc eingelesen wird. Das ist die lokale Konfigurationsdatei fuer Deine Standardshell, die bash. Wie so ein Alias genau auszusehen hat, kannst Du z.B. in "man bash", Abschnitt Aliases nachlesen. In Deinem Falle sollte es z.B. ein alias Cube='/pfad/zum/programm/linux_client -w1024 -h768' tun. Diese Zeile muesstest Du entsprechend angepasst in die genannte Datei schreiben. Wenn Du nun eine neue Shell aufmachst, kannst Du Dein Programm einfach durch Eingabe von "Cube" starten.
CU, Thomson
Hi Thomson, Das lief mit Cube leider nicht so richtig, weil es mit einem Konsolen-Alias die Texturen nicht mehr fand (ist ein Spiel). Keine Ahnung warum! .. Das mit den Aliasen war mir aber auch noch neu und ich konnte damit einige, häufig benutzte, Konsolen-Befehle verkürzen. Thx!
patrick dahl schrieb:
[...] Das lief mit Cube leider nicht so richtig, weil es mit einem Konsolen-Alias die Texturen nicht mehr fand (ist ein Spiel). Keine Ahnung warum! ..
Es waere moeglich, dass das Spielchen tatsaechlich aus dem Verzeichnis gestartet werden muss, in dem auch das Programm selbst liegt, damit alle Texturen etc. einwandfrei gefunden werden. Dann muesste der Alias abgeaendert werden in z.B. alias Cube='cd /pfad/zum/programm/ && ./linux_client -w1024 -h768'
Das mit den Aliasen war mir aber auch noch neu und ich konnte damit einige, häufig benutzte, Konsolen-Befehle verkürzen.
Prima. Gruesse, Th.
Thomas Hertweck <Thomas.Hertweck@gpi.uni-karlsruhe.de> [30 Nov 2003 13:28]:
Was Du suchst, ist vermutlich ein sog. Alias.
Schnickschnack, was er sucht ist eine Shellfunktion :) Das Bash-manual verweist selber darauf, dass man shellfunktionen den Vorzug gegenüber Aliasen geben sollte. Für diesen Fall wäre das cube() { cd games; ./linux_client -w1024 -h768; } oder schöner cube() { cd games ./linux_client -w1024 -h768 } Philipp
Am Sonntag, 30. November 2003 14:09 schrieb patrick dahl:
Hi,
wollte mal fragen, ob es möglich ist eigene Konsolenbefehle zu gestalten. Also, wenn ich z.b. kcalc eingebe, öffnet sich ja der Rechner. Wenn ich 'Cube' starten will muss ich jedoch jedes Mal 'cd games; ./linux_client -w1024 -h768' eingeben bzw. es im Verlauf suchen...
Kann man so etwas vllt mit einem Script automatisieren?
Hallo Patrick, bin selbst noch absolter Linux-Anfänger, aber wenn von den Cracks keiner antwortet, probiere ichs mal, obwohl ich selbst sowas noch nicht gemacht hab. So wie ich das System verstanden habe, geht das, was du willst mit der bash. Da kann man skripte erstellen, die wohl so ähnich sind wie früher die Batch - Dateien beim guten alten DOS. Ich hab das mal in dem Buch von Michael Kofler "LINUX", Addison-Wesley, überflogen. Solche Skripte scheinen sehr mächtig zu sein und können - wie das eben auch bei BAT so war - ganze Abläufe steuern. Hatte leider noch keine Zeit, mich näher damit zu beschäftigen, kann dir also nicht sagen, wie man das praktisch macht. Aber das Buch von Kofler sagt dazu eine ganze Menge. Gruß Bernd
Am Dienstag, 2. Dezember 2003 17:17 schrieb Bernd Merling:
Am Sonntag, 30. November 2003 14:09 schrieb patrick dahl:
Hi,
wollte mal fragen, ob es möglich ist eigene Konsolenbefehle zu gestalten. Also, wenn ich z.b. kcalc eingebe, öffnet sich ja der Rechner. Wenn ich 'Cube' starten will muss ich jedoch jedes Mal 'cd games; ./linux_client -w1024 -h768' eingeben bzw. es im Verlauf suchen...
Kann man so etwas vllt mit einem Script automatisieren?
Hallo Patrick,
bin selbst noch absolter Linux-Anfänger, aber wenn von den Cracks keiner antwortet, probiere ichs mal, obwohl ich selbst sowas noch nicht gemacht hab.
So wie ich das System verstanden habe, geht das, was du willst mit der bash. Da kann man skripte erstellen, die wohl so ähnich sind wie früher die Batch - Dateien beim guten alten DOS. Ich hab das mal in dem Buch von Michael Kofler "LINUX", Addison-Wesley, überflogen. Solche Skripte scheinen sehr mächtig zu sein und können - wie das eben auch bei BAT so war - ganze Abläufe steuern.
Hatte leider noch keine Zeit, mich näher damit zu beschäftigen, kann dir also nicht sagen, wie man das praktisch macht. Aber das Buch von Kofler sagt dazu eine ganze Menge.
Gruß Bernd
peinlich peinlich. Da hab ich vorhin wohl übershen, dass da ein Plus-Kästchen vor der Nachricht war und dass da schon 'ne Menge Antworten drin waren. Bitte um Entschuldigung. Gruß Bernd
participants (9)
-
Bernd Merling
-
Bernhard Walle
-
Christian Boltz
-
Ferdinand Ihringer
-
Ferdinand.Ihringer@epost.de
-
Jan.Trippler@t-online.de
-
patrick dahl
-
Philipp Thomas
-
Thomas Hertweck